$ inc修饰符如何处理mongodb中的并发请求?

时间:2015-03-13 05:11:25

标签: mongodb mongodb-query

$inc修饰符可用于增加字段(例如用于分析,页面浏览等的计数器)。

如果有并发请求,它是如何工作的?

说我有文件:

{ "views" : 1 }

如果使用$inc有两个并发请求会怎样?意见是2还是3?

1 个答案:

答案 0 :(得分:0)

这有点宽泛,但我可以提供广泛的笔触。截至MongoDB使用collection level locking和默认存储引擎。还有可用的WiredTiger存储引擎实现document level locking。但基本上在所有版本中,每个请求都会发生一定程度的“锁定”。根据您的实际吞吐量需求,水平越高越好。

基本上没有两个请求实际上同时发生,因为它们将“阻塞”锁定,直到它被释放。因此,返回的值(例如findAndModify()请求)将是该请求发出时的“当前状态”。

因此,在这样的请求中,首先执行的语句将返回值2,并且下一个执行的语句将返回值3.数据库中的结束位置是该值目前为3。

因此,某些东西无法同时“修改”,最终状态将是“所有”请求发出后的状态。所以$inc和其他运营商完全按照自己的意愿行事,并根据文档实际访问时的状态修改内容。