db.collection.insert与db.collection.insertOne&db.collection.insertMany的性能影响
我正在使用NodeJs的mongodb驱动程序 ,有3种方法:
1)db.collection.insert
2)db.collection.insertOne
3)db.collection.insertMany
我发现db.collection.insert做insertOne和insertMany的工作。
我也find相同的方法来删除和更新。
调用db.collection.insert方法与db.collection.insertOne&db.collection.insertMany方法相比,是否有任何性能影响?
假设我在一个有一百万条logging的集合中工作是安全的。
有一些细微的差别:
- db.collection.explain()对insertOne()或insertMany()不起作用 ,但对于insert()
- insertMany()和insert()可以是有序的(默认)或无序的。 在后一种情况下,由于性能原因,mongo可能会执行重新sorting。
- insert()返回一个WriteResult文档,而不是一个状态文档(包含新的objectIds)
所以这取决于你select的访问模式。 一般来说,为了提高性能,如果你不得不添加多个文档,试着只进行1次调用( insert()或insertMany() ),并使其无序(如果可能的话从应用程序的angular度来看)。 如果是使用( insert()或insertMany() )的问题,则取决于是否需要explain()或生成的objectIds,但是性能没有差别(如果键入: db.yourCollection.insert
或db.yourCollection.insertMany
(without ()
)你会看到两者都执行bulk.insert(obj)
)
TL; DR:
- 插入1个文件: insertOne()或insert()
- 插入n个文件: insertMany()或insert()
- 插入无序的文档: insertMany()或insert() + ordered:false
- 您需要使用ObjectIds的操作状态: insertOne()或insertMany()
- 你需要WriteResult : insert()
- 你需要解释() : insert()
在执行操作时,假设在30个文档上使用多个选项来插入/更新效率更高:
- 有一个调用服务器
- 服务器引擎进程无需等待新数据就可以工作
所以减less了往返,networking开销,并允许数据库引擎一次处理所有文件给列出的优势循环通过所有文档在客户端调用插入/更新一个接一个