长时间运行的查询与节点应用程序

时间:2017-09-18 19:42:50

标签: node.js mongodb bigdata

我有两个系列。一个集合是band_profiles,包含约15,000个文档和一个player_profiles集合,其中包含约500,000个配置文件。玩家可以在乐队中,乐队最多可以容纳100名玩家。这些信息纯粹是信息性的,我没有设计我的数据库关系。 BandProfile文档包含必要的PlayerProfile信息。

所有信息都来自第三方API,因此PlayerProfile可以比BandProfile更新,反之亦然。为了找到未知的波段,我扫描所有的PlayerProfiles并检查未知的波段ID。

我的问题:

两个集合都非常大,我能够使用聚合查询找到未知数id,使用当前数据集运行需要大约40-120秒。我很担心,因为MongoDB上的CPU占用率很高,我考虑过尝试选项。

我以为我可以处理Express应用程序中的数据。我在两个集合上都使用find()来获取整个集合数据。之后我在Express中处理了数据,我注意到RAM增加了4gb,CPU增加了30%(localhost上有1个调试实例)。

因此我想知道:处理如此大型数据集的最佳方法是什么?使用长时间运行的MongoDB查询是否可以,或者我是否应该在Express中为此目的处理我的数据?由于这是一个“BackgroundTask”,它不应该影响我的网站的性能。

1 个答案:

答案 0 :(得分:0)

取决于您对这些大型数据集的新鲜程度的关注程度。


<强> 1。不那么新鲜的数据方法

您可以制作mongoDB的副本集并在那里处理长聚合查询。


<强> 2。更新鲜的数据方法(因CPU功率/代码效率而异)

您可以使用非聚合查询获取数据集,并在Node.js,JavaScript中进行这些计算。