假设我有一个带有views_count
,males_views_count
和females_views_count
字段的集合。我希望能够在$inc
查看页面时分别(增加)计数字段。
这个问题是我收到了几个并发连接,并且可能会出现竞争情况。
我一直在阅读有关 Mongodb 中的原子操作的信息。他们通常有成功或失败的方法。记录要么是写的,要么不是。这是否意味着我需要创建逻辑来确定操作是否失败,如果失败,请重试?
回到我的场景。如果我想让每个视图都计数(即使发生竞争条件)怎么办。我知道 Mongodb 锁与传统的 RDBMS 略有不同。通常,我会实现一种乐观锁定技术。如同:
begin
# .. do work .. determine if user is a male or a female
stat.save
rescue StaleDocumentError
stat.reload
retry
end
或者原子操作是否旨在防止竞争条件,因为它是执行更新的服务器并且它对真相是什么具有权威性?如果是这样,我们是否还需要实现乐观/悲观锁定技术,或者如果我们使用原子操作,Mongodb 会为我们解决这个问题?