我有一大堆数据,我想编写一个脚本来读取然后处理;在我的例子中抓取一些字段并发送到RESTful API。
为了节省负载,我想使用limit并跳过对我检索的数据进行分页并在while循环中使用它,但是因为它是nodejs,所以我必须使用回调。
在没有崩溃/超时的情况下处理nodejs / mongo中大量数据的最佳方法是什么?
答案 0 :(得分:1)
(我假设您的文件不需要按任何特定顺序处理。)
忘记skip
因为这是一项昂贵的操作。来自官方documentation:
cursor.skip()方法通常很昂贵,因为它需要 服务器从集合或索引的开头走到get 开始返回结果之前的偏移或跳过位置。作为 offset(例如上面的pageNumber)增加,cursor.skip()将成为 更慢,更密集的CPU。使用更大的集合,cursor.skip() 可能会成为IO界限。
Blakes Seven共享的答案中建议的转发转发是一个不错的选择。但是,使用它的经验可能不是很愉快,因为你需要跟踪异步性的分页,除非你的代码简短而整洁,否则很容易陷入烦躁的调试时间。
为了保持最灵活,不要求不必要地进行排序,只需从主集合中删除可配置大小的数据块,处理它们,然后将它们转储到辅助集合中。如果每个块的处理时间很长,那么不是直接存储到另一个集合,而是将文档存储在临时集合中,处理它,然后将整个(临时)集合转储到二级集合(或者只是删除文档,如果你没有不需要它们。这就是我要做的事情。但是,在保留主要集合的备份之后。)
这有更多好处: