如何在MongoDB中优化使用大型数据集

时间:2016-04-12 20:27:59

标签: node.js mongodb performance bulkinsert node-mongodb-native

我们在 node.js 中生成了多个大约10,000个文档的集合(将来会越来越多),需要多次存储/查询/过滤/投影我们有一个 mongodb aggregation pipeline。一旦满足某些条件,就会重新生成并存储文档。

当我们有5,000个文件时,一切正常。我们将它们作为数组插入到单个文档中,并在聚合管道中使用unwind。但是,在某个时刻,文档不再适合单个文档,因为它超过了16 MB的文档大小限制。我们需要批量存储所有内容,并添加一些标识符以了解它们属于哪个“集合”,因此我们只能在这些文档上使用管道。

问题:在我们可以在管道中查询文件之前编写文件是有问题的。 bulk.execute()部分可能需要10到15秒。将它们添加到node.js中的数组并将< 16 MB doc文档写入MongoDB只需要几分之一秒。

bulk    = col.initializeOrderedBulkOp();

for (var i = 0, l = docs.length; i < l; i++) {
    bulk.insert({
        doc     : docs[i],
        group   : group.metadata
    });
}

bulk.execute(bulkOpts, function(err, result) {
    // ...
}

我们如何解决批量写入开销延迟?

到目前为止的想法:

  • 在数据写入磁盘时暂时处理查询memory based collection
  • 图如果Memory Storage Engine(警报:被视为测试版而非生产版)值得MongoDB Enterprise许可。
  • 除了压缩和加密之外,WiredTiger存储引擎可能比MMAPv1有所改进。
  • 无论如何都要存储单个(数组)文档,但将其拆分为<16 MB块。

0 个答案:

没有答案