天天看點

Nosql Mongodb 并發控制之樂觀鎖

我們知道sql中并發控制采用的樂觀鎖就是在記錄中增加版本号或timestamp,那麼mongodb中如何實作呢?

Mongodb不善于處理事務,但提供了findAndModify指令。該指令允許對文檔進行原子性更新,并在同一次調用中傳回:

代碼如如:

db.collection_yown.findAndModify(
    {
      query:{"name":"yown"},update:{"version":},new:true or false
    }
)
           

預設情況下,findAndModify指令會傳回更新前的文檔,要是傳回修改後的文檔,就把new設定為false.

Mongodb同時也提供update指令,這兩者的差別如下:

update和findAndModify都可以用做更新操作;

差別

findAndModify是有傳回值的,輸出中的value字段即傳回修改之前的文檔,使用 new:true選項傳回修改後的文檔。 update是更新操作,是沒有傳回值的。

findAndModify 強調操作的原子性(atomically),比如用來實作自增1的操作或者操作隊列。屬于 get-and-set 式的操作,一般來講,findAndModify 比update操作稍慢,因為需要等待資料庫的響應。

另外findAndModify ,其中modify可以是update,還可以是remove

{
findAndModify: <string>,
query: <document>,
sort: <document>,
remove: <boolean>,
update: <document>,
new: <boolean>,
fields: <document>,
upsert: <boolean>
}