处理大型数据集的图形和显示的最佳方法

时间:2013-10-25 17:50:28

标签: javascript php sql symfony

我们的网站为客户提供各种数据服务;其中一个是仪表数据。有些仪表每15分钟记录一次信息,有些则每分钟记录一次。此数据将发送到我们的SQL数据库。

所有这些数据都通过图形显示(通过PHP和JPGraphs生成服务器端),每个单独的日志条目在可折叠表(jquery 1.10.2)中显示为一行。

当客户想要查看数据时,他们会选择日期范围以及他们想要查看的指标。如果他们想查看每分钟记录仪表的最后3天,那么它的加载速度非常快。如果他们想查看其中的2个,那么加载大约需要15-30秒。真正的问题出现在他们想要查看数月的数据时;特别是超过1规格。这可能需要15-20分钟才能加载,浏览器会反复询问我们是否要阻止脚本填充可折叠表行(jquery)。

显然这是一个问题,因为客户想要一个相对快速的响应(最多1-5分钟)。理想情况下,我们还希望能够一次从几个月中提取量表数据。我们现在唯一可以做的就是一次提取数据2周并手动编译总数。

供参考:如果我想为每分钟一次的记录仪提取2个月数据,那么将通过jQuery将86,400行添加到可折叠表中。该页面大约需要。加载5分钟,浏览器在此期间非常慢。

我的问题是:使用基于PHP的服务器(Symfony 1.4框架)和javascript来提取/绘制/填充数据的最佳方法是什么?

我们是否应该考虑升级我们分配的处理能力/ RAM(我们由GoDaddy托管)?是否有更快的方式来填充可折叠,而不是使用jquery?我们所有的计算机都是在服务器端完成的。我们应该只提取原始数据并让客户端进行数据处理吗?我们应该在客户端和服务器之间拆分数据处理吗?

这是网页的屏幕截图。它被裁剪,以便不显示更多客户端敏感信息:

enter image description here

1 个答案:

答案 0 :(得分:1)

回应我的评论。

由于您只需要在服务器端创建整个数据集(在服务器上创建图形),这意味着您实际上不需要将整个数据集发送到客户端。

而是将一小部分发送给客户端。让我们说前200个结果。然后你可以继续将结果集的其余部分缓存到JSON文件中(lite数据库,无论你想要什么)。然后创建一个用户可以请求更多数据的界面。无限滚动很好,但有自己的问题。也许只是一个按钮,表示加载更多数据。正如人们所说的那样,一次表中任何超过几百个数据点都是疯狂的,因为无论如何人们都不会看它。然后当他们点击按钮获取更多数据时,您向服务器发送一个AJAX请求,其中包含您想要的数据的正确参数。

例如,他们第一次单击getMoreData()时,您希望获得接下来的200个数据点。所以你发送getMoreData(start = 200,length = 200)。您的服务器获取AJAX请求,并在JSON文件或lite数据库中找到正确的数据,无论您在哪里缓存结果。并且用户可以继续请求更多数据(确保更新起始参数),并且您只返回一小部分。用户甚至没有意识到他们没有在他们面前的整个数据集,因为它看起来像他们那样。

关于这一点很复杂的是排序和搜索。如果要实现这些,则需要确保转到服务器端并对缓存的结果进行排序/搜索。

所以基本上你有一个系统,你可以在服务器端创建整个图形,这不应该花费很长时间。需要很长时间的是将整个数据集加载到客户端。所以你把它分解成小块。您甚至可以使用此方法轻松创建分页等。