2011-02-05 59 views
2

由于我们在应用程序中收集的数据的性质,它允许用户能够搜索1,000,000多行数据,并且尽可能快地接收结果客户端。如何显示大量的报表数据客户端(mongoDB,JS)

我们玩过各种技术,目前正在试验文档存储引擎MongoDB。我们实际上是以我们希望在客户端展示的方式将报告数据存储在Mongo中。

但是,这是我想要依靠您的经验。我们已经使用了一些报表插件,比如datatables.net,但是当客户端请求可能匹配超过100,000条记录的数据时,将这些数据传递给客户端的延迟时间可能需要一分钟才能将JSON从服务器导出到客户。

我已经尝试通过只向客户端发送1000个结果来过滤结果集,但是如果用户决定对列进行排序呢?整个请求必须再次执行,并将第1000个结果加载到客户端。

但是,如果客户端选择在列中搜索,结果必须重新获取。所有这些问题都不存在,当全部的数据已经被加载到客户端。

所以基本上我的问题是,怎样才能高效快速地让客户搜索和操作大型数据集,但将结果以一种不需要每次结果一次性发送到客户端的方式传递给客户端,因此保持客户端尽可能轻量级?

我确定必须有一些MongoDB的前端数据类型插件,可能通过node.js直接进行JSON通信,但是我找不到任何东西!

感谢您的帮助。

+1

值得注意的是,MongoDB在[BSON](http://bsonspec.org/)中存储对象,所以仍然存在转换为JSON的情况。我怀疑你看到的大部分延迟只是由于必须传输和解析客户端的数据量。 – 2011-02-05 19:06:36

回答

5

听起来像你的问题在于你试图通过客户端的数据量巨大。什么屏幕显示1000行数据?

使用开始索引,排序顺序和页面大小发出请求,并仅按该顺序提取大量数据并将其返回给客户端。

查看jqGrid,例如,将客户端网格传递给服务器,并且一次只检索一个页面。使用MongoDB的jqGrid和正确的索引是非常快的。

+0

这看起来像一个伟大的表插件,谢谢!我会对此有一个很好的发挥。 – 2011-02-06 14:49:28

1

MongoDB非常棒,但是您可能还希望将这些内容编入MongoDB之外,以提供您描述的性能和灵活性。看看Apache SolrElastic Search。这两个都基于Lucene,它具有非常强大的搜索功能。特别是您可以以非常高效的方式执行带分页和排序的查询。这两种工具都可以用JSON返回结果集。有了这么多的记录,并且使用基于Lucene的东西,您还将能够非常轻松地提供更高级的过滤功能,例如浏览和屏蔽。

+0

Apache Solr很甜! – Stephen 2011-02-06 07:44:31

相关问题