由于我们在应用程序中收集的数据的性质,它必须允许用户能够搜索1,000,000多行数据,并尽快接收客户端的结果。
我们使用各种技术,目前正在尝试使用文档存储引擎MongoDB。我们基本上以我们希望在客户端显示它的方式将报告数据存储在Mongo中。
但是,这是我想要依靠你的经验的地方。我们使用了一些报告表插件,例如datatables.net,但是当客户端请求可能匹配100,000多条记录的数据时,将数据传递到客户端的延迟可能需要花费一分多钟才能将JSON从服务器导出到客户。
我尝试通过一次只向客户端发送1000个结果来过滤结果集,但是如果用户决定对列进行排序怎么办?必须再次执行整个请求,并将第一个1000个结果加载到客户端。
但是如果客户选择在列中搜索,则必须再次重新获取结果。当所有数据已加载到客户端时,所有这些问题都不存在。
基本上我的问题是,您如何高效,快速地允许客户搜索和操作大型数据集,但是将结果传递给客户端的方式并不需要一次性发送所有结果,因此,尽可能保持客户端的轻量化?
我确定必须有一些MongoDB的前端数据表类型插件,可能通过node.js进行直接JSON通信,但我找不到任何东西!
感谢您的帮助。
答案 0 :(得分:5)
听起来您的问题在于您尝试通过客户端的大量数据。什么屏幕显示1,000行数据?
使用起始索引,排序顺序和页面大小发出请求,并按该顺序仅获取那么多数据并将其返回给客户端。
以jqGrid为例,将其作为客户端网格,将分页和排序信息传递回服务器,一次只检索一个页面值。带有MongoDB的jqGrid和正确的索引非常快。
答案 1 :(得分:1)
MongoDB非常棒,但是您可能还想在MongoDB之外索引此内容,以提供您描述的性能和灵活性。请查看Apache Solr或Elastic Search。这两个都基于Lucene,它具有非常强大的搜索功能。特别是,您可以以非常高效的方式执行分页和排序查询。这两个工具都可以在JSON中返回结果集。有了这么多记录,并使用基于Lucene的东西,你也可以非常容易地提供更高级的过滤功能,如分页浏览和词干。