MongoDB如何处理并发更新?

lol*_*f37 22 mongodb mongodb-.net-driver

到目前为止,我开始在工作中使用MongoDB.我想知道MongoDB如何处理并发更新?我已经读过MongoDB中没有锁定功能,所以我想知道处理这个问题的常用做法是什么.

谢谢.

Rem*_*iet 31

MongoDB使用进程范围的写锁定来保证一次只能执行一次写操作(更新/插入/删除).因此,它自动解决并发问题,因为不允许写并发.

如果4个线程尝试更新操作,则其中一个线程将执行写锁定,执行更新并释放锁定.之后剩下的3个中的一个将抓住锁,进行更新等.

如果您的操作无法包含在单个写入操作中,则并发性才会起作用.请注意,对于最常见的用例(查找文档,更新它并以原子方式获取新版本),MongoDB提供了"findAndModify"命令,该命令就是这样:http://www.mongodb.org/display/DOCS/findAndModify+Command

更新:锁定现在更精细.

  • MongoDb 3.2 以后的 WiredTiger 存储引擎是默认的存储引擎,它支持写操作的文档级锁。https://docs.mongodb.com/manual/core/wiredtiger/#storage-wiredtiger。 (2认同)

Kar*_*ath 6

使用修饰符操作:

$inc $set $unset $push $pushAll $addToSet $pop $pull $pullAll $rename $bit

所有这些都是原子的.

  • 只要您使用修饰符操作,您拥有多少并发写入并不重要. (3认同)