2

由于我们在应用程序中收集的数据的性质,有必要让用户能够搜索超过 1,000,000 行数据,并尽可能快地在客户端接收结果。

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

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

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

但是如果客户选择在一个列中搜索,结果必须再次重新获取。当所有数据都加载到客户端时,所有这些问题都不存在。

所以本质上我的问题是,您如何有效和快速地允许客户端搜索和操作大型数据集,但以一种不需要一次性发送每个结果的方式将结果传递给客户端,从而保持客户端尽可能轻量级?

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

谢谢你的帮助。

4

2 回答 2

5

听起来您的问题在于您试图通过客户端传递的大量数据。什么屏幕显示 1,000 行数据?

使用起始索引、排序顺序和页面大小发出请求,并按该顺序仅获取那么多数据并将其返回客户端。

以 jqGrid 为例,它是一个客户端网格,它将分页和排序信息传递回服务器,一次只检索一个页面值。带有 MongoDB 和正确索引的 jqGrid 速度非常快。

于 2011-02-06T07:37:12.613 回答
1

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

于 2011-02-05T19:24:02.983 回答