TheDataGuy Asked: 2019-10-09 16:33:04 +0800 CST2019-10-09 16:33:04 +0800 CST 2019-10-09 16:33:04 +0800 CST Mongodb - 将 Bulk.find.remove() 锁定集合 772 我计划运行Bulk.find.remove()一个非常大的集合。(1.2TB)。 它会阻止插入或更新其他记录(不属于上述记录的一部分find)吗? mongodb delete 1 个回答 Voted Best Answer Kevin 2019-10-09T20:05:04+08:002019-10-09T20:05:04+08:00 简短的回答是:不,您不会被阻止。 在执行多文档写操作时,无论是通过单次写操作还是多次写操作,其他操作可能会交错。 长解释是: 集合是粒度级别(或资源)。 每当有写操作时,必须在资源上应用排他 (X) 锁定模式。 由于Collection是这种场景下的资源,所以必须对Collection应用Exclusive(X)锁模式。 对于所有外部级别:数据库、全局;必须应用 Intent Exclusive (IX)。 当对 Collection 触发写入操作时,控件必须执行以下一系列锁定: MongoD 实例必须锁定在 Intent Exclusive (IX) 锁定模式,以便在粒度级别(数据库/集合/文档)应用写入操作。数据库必须以意向排他 (IX) 锁定模式锁定,目的是在粒度级别(集合/文档)应用写操作。集合必须以排他 (X) 锁定模式锁定,才能对集合应用写操作。 您可以在以下链接中找到更多信息: https://docs.mongodb.com/manual/core/write-operations-atomicity/ https://docs.mongodb.com/manual/faq/concurrency/ https://docs.mongodb.com/manual/reference/方法/Bulk.find.remove/ https://www.tutorialkart.com/mongodb/mongodb-locks/
简短的回答是:不,您不会被阻止。
在执行多文档写操作时,无论是通过单次写操作还是多次写操作,其他操作可能会交错。
长解释是:
集合是粒度级别(或资源)。
每当有写操作时,必须在资源上应用排他 (X) 锁定模式。
由于Collection是这种场景下的资源,所以必须对Collection应用Exclusive(X)锁模式。
对于所有外部级别:数据库、全局;必须应用 Intent Exclusive (IX)。
当对 Collection 触发写入操作时,控件必须执行以下一系列锁定:
MongoD 实例必须锁定在 Intent Exclusive (IX) 锁定模式,以便在粒度级别(数据库/集合/文档)应用写入操作。数据库必须以意向排他 (IX) 锁定模式锁定,目的是在粒度级别(集合/文档)应用写操作。集合必须以排他 (X) 锁定模式锁定,才能对集合应用写操作。
您可以在以下链接中找到更多信息:
https://docs.mongodb.com/manual/core/write-operations-atomicity/ https://docs.mongodb.com/manual/faq/concurrency/ https://docs.mongodb.com/manual/reference/方法/Bulk.find.remove/ https://www.tutorialkart.com/mongodb/mongodb-locks/