巨大的数据和PHP错误


Enormous data and PHP errors

我目前正在使用以下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毫秒,未来会更大。将这些数据返回给用户并在客户端执行所有操作可以吗?

欢迎任何建议或想法。

当显示大量数据时,我认为最好的方法(也是最常见的方法)是生成具有特定分辨率的视图。

当用户缩小(放大)给定位置时,您将提高该位置的分辨率,从而减小块的总体大小

通过这种方式,您可以通过php生成更小的文件大小,这将理想地表示相同的图。类似于谷歌地图过去的工作方式。

JSON并不能真正适应分块。每个json字符串本身都必须是完整的,因为它直接表示一个完整的数据结构:字符串、数组、对象等

您可以做的是以独立块的形式发送数据,并在JS中重建数据结构。例如,请求#1发送超过10000行的数据,请求#2获得1000-2000,请求#3获得20001-30000等。

但你最终还是会在浏览器中占用大量内存。PHP和JS对于大型结构都不是特别高效的内存。