Mongodb Mongo DB性能效率:插入与更新

Mongodb Mongo DB性能效率:插入与更新,mongodb,performance,insert,database,Mongodb,Performance,Insert,Database,我试着四处搜索,找到了诸如和关于SQL查询性能的问题,但MongoDB没有 我的用例很简单,使用php mongo驱动程序,将文档从原始集合移动到归档集合 我担心这两个集合中会有重复的文档,并且具有相同的“\u id”,因此如果insert()将出现“重复键错误”。在插入归档集合时,有两种方法可以处理重复数据: 一,。使用update()方法: 二,。使用insert()方法,但在我的代码中,我需要一个try-catch块来处理Mongo DB的“重复键错误” 显然,使用update()可以避免

我试着四处搜索,找到了诸如和关于SQL查询性能的问题,但MongoDB没有

我的用例很简单,使用php mongo驱动程序,将文档从原始集合移动到归档集合

我担心这两个集合中会有重复的文档,并且具有相同的“\u id”,因此如果insert()将出现“重复键错误”。在插入归档集合时,有两种方法可以处理重复数据:

一,。使用update()方法:

二,。使用insert()方法,但在我的代码中,我需要一个try-catch块来处理Mongo DB的“重复键错误”

显然,使用update()可以避免“重复键错误”,我不必担心重复。据我所知,update()和insert()都将引用'\u id'索引,因此速度可能类似。我的问题是,update()的性能效率是否比insert()差?假设我有GB甚至TB的归档集合


非常感谢。

update
性能与
insert
进行比较没有意义,因为它们执行的是两种不同的操作。嗨,我只是想知道我应该使用哪种策略case@keypoint这要看情况了。如果更新将增加文档的大小,那么mongoDB可能需要重新定位文档。如果频繁地重新定位文档(在并发更新时),则会导致性能问题。在这种情况下,最好选择insert。还有一点,如果您需要备份一个集合,最好使用mongodump命令,因为它非常fasthi@SarathNair感谢您的回复。实际上,不会对任何单个文档进行修改,只需重复插入,新文档与归档集合中已有的文档完全相同。再次感谢您在这种情况下,为什么要在输入集合中迭代整个文档?我会使用以下策略。从输入集合中读取按_id字段排序的文档,并将其存档。我将存储上次存档文档的_id值。在下一个归档过程中,我将使用存储的_id检索db.collection.find({u id:{$gt:storedId}})等文档。在本例中,我将获取尚未归档的文档,并在归档集合中插入这些文档
doc = db.original.findOne()
db.archive.update(doc['_id'], doc, { upsert: true })