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 的限制?我们每次都返回一大块数据吗?他们通常如何向用户展示大量数据并根据这些数据创建图表和报告?我们需要克服的另一个大问题是返回的 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 回答