【问题标题】:How to show huge amount of report data client side (mongoDB, JS)如何在客户端显示海量报表数据(mongoDB、JS)
【发布时间】:2011-06-21 22:31:49
【问题描述】:

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

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

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

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

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

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

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

感谢您的帮助。

【问题讨论】:

  • 值得注意的是,MongoDB 将对象存储在 BSON 中,因此仍然会发生向 JSON 的转换。我怀疑您看到的大部分延迟仅仅是由于必须在客户端传输和解析的数据量。

标签: javascript mongodb reporting node.js datatables


【解决方案1】:

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

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

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

【讨论】:

  • 这看起来确实是一个很棒的表格插件,谢谢!我会玩得很好。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    相关资源
    最近更新 更多