Pte*_*tyl 1 mongodb mongodb-query
修饰符$inc可用于增加字段(例如用于分析的计数器、页面浏览量等)。
如果有并发请求,它如何工作?
假设我有文件:
{ "views" : 1 }
Run Code Online (Sandbox Code Playgroud)
如果有两个并发请求使用 会发生什么$inc?观看次数是 2 还是 3?
这确实有点宽泛,但我可以提供大致的思路。从 MongoDB 开始,使用默认存储引擎的集合级锁定。还有可用的 WiredTiger 存储引擎,它实现了文档级锁定。但基本上在所有版本中,每个请求都会发生某种程度的“锁定”。根据您的实际吞吐量需求,级别越细越好。
本质上,没有两个请求实际上同时发生,因为它们会“阻塞”所发出的锁,直到它被释放。因此,将返回的值(例如请求findAndModify())将是发出该请求时的“当前状态”。
因此,对于这样的请求,首先执行的语句将返回值 2,下一个执行的语句将返回值 3。数据库中的结束位置是该值目前为 3。
因此,某些东西不可能同时“修改”,最终状态将是在发出“所有”请求之后发生的状态。因此$inc,其他操作员完全按照他们应该做的那样,并根据文档实际能够访问时的状态修改内容。
| 归档时间: |
|
| 查看次数: |
2112 次 |
| 最近记录: |