如何做一个非常大的查询sails-mongo?

我正在使用风帆0.11.2。 用最新的帆mongo适配器。 我有一个非常大的数据库(千兆字节的数据)主要是时间戳和值。 而我使用蓝图API查询它。

如果我使用localhost:1337 / datatable?limit = 100000000000进行查询,nodejs挂在0.12上,CPU使用率很高,并在v4上崩溃。 它在toJSON函数上崩溃。

我已经发现,我需要对我的API进行多个查询。 但是我不怎么去做。

我怎样才能让多个查询,“不爆炸”我的服务器?


更新:

在最新的0.12.3版本中,最新的waterline和sails-mongo,查询更顺畅。 云上的崩溃是我没有足够的RAM来处理同一个T2.micro实例上的sailsjs和mongodb。

我已经将mongodb服务器移到M3.Medium实例。 而现在服务器不再崩溃,但它冻结。 我使用跳过限制,它很适合sails.js,但是对于mongodb是一个巨大的资源浪费!

Mongodb使用limit = skip + limit来进行内部查询。 然后将光标移动到所需的数据并返回。 当你正在做很多的分页时,你正在使用大量的内部查询。 随着查询大小的增加。

正如本文所解释的那样,避免在MongoDB中浪费资源的方法是避免使用skip和巧妙地使用_id作为查询的一部分。

我没有使用帆mongo,但我通过在nodejs中使用mongo驱动程序实现了上面的想法: https ://gist.github.com/pulkitsinghal/2f3806670439fa137210fc26b134237f

以下两节展示了代码如何操作_id并使其成为查询的一部分:

总体代码stream程:

  1. getPage()处理工作,你可以设置pageSizequery你喜欢的: https : getPage()
  2. 方法签名: https : //gist.github.com/pulkitsinghal/2f3806670439fa137210fc26b134237f#file-sample-js-L29
  3. 进程pagedResults尽快可用: https : pagedResults
  4. 转到下一页: https : //gist.github.com/pulkitsinghal/2f3806670439fa137210fc26b134237f#file-sample-js-L53
  5. 当没有更多数据时,代码将停止: https : //gist.github.com/pulkitsinghal/2f3806670439fa137210fc26b134237f#file-sample-js-L41
  6. 或者在数据的最后一页工作时停止: https : //gist.github.com/pulkitsinghal/2f3806670439fa137210fc26b134237f#file-sample-js-L46

我希望这提供了一些灵感,即使它不是一个确切的解决scheme,您的需求。