$inc
修饰符可用于增加字段(例如用于分析,页面浏览等的计数器)。
如果有并发请求,它是如何工作的?
说我有文件:
{ "views" : 1 }
如果使用$inc
有两个并发请求会怎样?意见是2还是3?
答案 0 :(得分:0)
这有点宽泛,但我可以提供广泛的笔触。截至MongoDB使用collection level locking和默认存储引擎。还有可用的WiredTiger存储引擎实现document level locking。但基本上在所有版本中,每个请求都会发生一定程度的“锁定”。根据您的实际吞吐量需求,水平越高越好。
基本上没有两个请求实际上同时发生,因为它们将“阻塞”锁定,直到它被释放。因此,返回的值(例如findAndModify()
请求)将是该请求发出时的“当前状态”。
因此,在这样的请求中,首先执行的语句将返回值2,并且下一个执行的语句将返回值3.数据库中的结束位置是该值目前为3。
因此,某些东西无法同时“修改”,最终状态将是“所有”请求发出后的状态。所以$inc
和其他运营商完全按照自己的意愿行事,并根据文档实际访问时的状态修改内容。