我有这个对象,其中包含一些元数据和大量项目。我曾经将其存储在 mongo 中,并通过以下方式查询它$unwind
荷兰国际集团的数组。
然而,在极端情况下,阵列变得如此之大,以至于我遇到了 16MB BSON 限制。
所以我需要将数组的每个元素存储为单独的文档。为此,我需要将元数据添加到所有这些内容中,以便我可以找到它们。建议我使用批量操作为了这。
然而,性能似乎真的很慢。插入一份大文档几乎是即时的,这需要花费十秒.
var bulk = col.initializeOrderedBulkOp();
var metaData = {
hash : hash,
date : timestamp,
name : name
};
// measure time here
for (var i = 0, l = array.length; i < l; i++) { // 6000 items
var item = array[i];
bulk.insert({ // Apparently, this 6000 times takes 2.9 seconds
data : item,
metaData : metaData
});
}
bulk.execute(bulkOpts, function(err, result) { // and this takes 6.5 seconds
// measure time here
});
批量插入 6000 个文档,总计 38 MB 的数据(在 MongoDB 中转换为 BSON 为 49 MB),性能似乎糟糕得令人无法接受。
将元数据附加到每个文档的开销不会那么糟糕,对吧?更新两个索引的开销不会那么糟糕,对吧?
我错过了什么吗?有没有更好的方法来插入需要作为一个组来获取的文档组?
这不仅仅是我的笔记本电脑。在服务器上也一样。让我觉得这不是配置错误,而是编程错误。
使用 MongoDB2.6.11
带节点适配器node-mongodb-native 2.0.49
-update-
只需将元数据添加到批量中的每个元素即可2.9秒。需要有更好的方法来做到这一点。