巨大的数据和PHP错误

时间:2012-09-11 21:35:36

标签: php javascript mysql highcharts highstock

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

欢迎任何建议或想法。

2 个答案:

答案 0 :(得分:2)

当显示大量数据时,我认为你能做的最好的事情(最常见的一种)就是以一定的分辨率生成视图。

当用户缩小(放大)给定点时,您会增加该点的分辨率,从而减少块的整体大小

这样你就可以通过php生成较小的文件大小,理想情况下代表相同的图形。类似于谷歌地图过去工作的方式。

答案 1 :(得分:0)

JSON不能真正修改为分块。每个json字符串必须完整,因为它直接表示一个完整的数据结构:字符串,数组,对象等......

您可以做的是以独立的块发送数据,并在JS中重建数据结构。例如请求#1发送超过10,000行的数据,请求#2获得10,001-20,000,#3获得20,001-30,000等...

但是你仍然会在浏览器中占用大量内存。对于大型结构,PHP和JS都不是特别有效的内存。