2

サーバーから返されたデータを表示するために、現在、次の HighCharts:HighStock:Charts: http://www.highcharts.com/stock/demo/data-groupingを使用しています。

MySQL データベースからデータを取得しますが、これは非常に大きなデータです。1 秒ごとにセンサー メトリックを保存しています。しばらくすると、次のエラーが発生しました。

[Wed Sep 12 00:15:56 2012] [error] [client 127.0.0.1] PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 4756882 bytes) in C:\\wamp\\www\\admin\\getTrends.php on line 156, referer: http://localhost/admin/trends.php
[Wed Sep 12 00:15:56 2012] [error] [client 127.0.0.1] PHP Stack trace:, referer: http://localhost/admin/trends.php
[Wed Sep 12 00:15:56 2012] [error] [client 127.0.0.1] PHP   1. {main}() C:\\wamp\\www\\admin\\getTrends.php:0, referer: http://localhost/admin/trends.php
[Wed Sep 12 00:15:56 2012] [error] [client 127.0.0.1] PHP   2. getTrendsDataAI() C:\\wamp\\www\\admin\\getTrends.php:33, referer: http://localhost/admin/trends.php
[Wed Sep 12 00:15:56 2012] [error] [client 127.0.0.1] PHP   3. printResults() C:\\wamp\\www\\admin\\getTrends.php:102, referer: http://localhost/admin/trends.php
[Wed Sep 12 00:15:56 2012] [error] [client 127.0.0.1] PHP   4. createData() C:\\wamp\\www\\admin\\getTrends.php:230, referer: http://localhost/admin/trends.php
[Wed Sep 12 00:15:56 2012] [error] [client 127.0.0.1] PHP   5. implode() C:\\wamp\\www\\admin\\getTrends.php:156, referer: http://localhost/admin/trends.php

このデータを JSON オブジェクトとして HighStocks に返して表示するための最適なソリューションは何ですか? そして、どうすれば PHP の制限を克服できるでしょうか? 毎回データのチャンクを返しますか? 通常、膨大な量のデータをユーザーに提示し、このデータからグラフやレポートを作成する方法は? 克服しなければならないもう 1 つの大きな問題は、返される JSON オブジェクトが膨大であることです。この時点で約 20 ~ 30 mbs であり、将来的にはさらに大きくなります。このデータをユーザーに返し、すべてクライアント側で実行してもよろしいですか?

提案や考えは大歓迎です。

4

2 に答える 2

2

大量のデータを表示するとき、あなたができる最善のこと (そして最も一般的なこと) は、特定の解像度でビューを生成することだと思います。

ユーザーが特定のスポットを絞り込む (ズームインする) と、そのスポットの解像度が上がり、チャンクの全体的なサイズが小さくなります。

このようにして、理想的には同じグラフを表す php 経由でより小さなファイル サイズを生成できます。昔のグーグルマップと同じようなもの。

于 2012-09-11T21:43:10.543 に答える
0

JSON は実際にはチャンクに変更できません。各 json 文字列は、文字列、配列、オブジェクトなどの完全なデータ構造を直接表すため、それ自体が完全である必要があります。

できることは、データを独立したチャンクで送信し、JS でデータ構造を再構築することです。たとえば、リクエスト #1 は 10,000 行以上のデータを送信し、リクエスト #2 は 10,001 ~ 20,000 を取得し、#3 は 20,001 ~ 30,000 を取得します。

しかし、それでもブラウザのメモリ フットプリントが膨大になることになります。PHP も JS も、大規模な構造に対してメモリ効率が特に優れているわけではありません。

于 2012-09-11T21:40:31.593 に答える