我有一个带有一些元数据和大量项目的对象。我过去在Mongo中存储它,并通过使用
因此,我需要将数组的每个元素都存储为单独的文档。为此,我需要将元数据添加到所有元素中,以便我可以找回它们。建议我使用批量操作来完成这个任务。
然而,性能似乎非常慢。插入一个大型文档几乎是即时的,而这需要长达十秒钟的时间。
批量插入 6000 个文档,总共38MB的数据(在MongoDB中转换为49MB的BSON),性能看起来非常差。 每个文档附加元数据的开销不会很大,对吗?更新两个索引的开销不会很大,对吗? 我有什么遗漏的地方吗?是否有更好的方法可以插入需要一起获取的文档组? 这不仅仅是我的笔记本电脑。服务器也是如此。这让我认为这不是配置错误,而是编程错误。 使用MongoDB 2.6.11和node适配器node-mongodb-native 2.0.49 -更新- 仅在批量添加元数据的操作中就占用了2.9秒。需要有更好的方式来解决这个问题。
$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 个文档,总共38MB的数据(在MongoDB中转换为49MB的BSON),性能看起来非常差。 每个文档附加元数据的开销不会很大,对吗?更新两个索引的开销不会很大,对吗? 我有什么遗漏的地方吗?是否有更好的方法可以插入需要一起获取的文档组? 这不仅仅是我的笔记本电脑。服务器也是如此。这让我认为这不是配置错误,而是编程错误。 使用MongoDB 2.6.11和node适配器node-mongodb-native 2.0.49 -更新- 仅在批量添加元数据的操作中就占用了2.9秒。需要有更好的方式来解决这个问题。
bulk.insert()
时,实际上并没有向服务器发送任何数据,而是在内存中构建数据(实际上是第二次)。直接从源代码中阅读可能更好。另外,添加相同的数据到所有内容的目的是什么? - Blakes Seven