MongoDB: 原子性和事務

MongoDB: 原子性和事務

原文鏈接: Atomicity and Transactions

MongoDB中, 文檔級別的的寫操作是原子性的, 甚至是在對某個文檔的操作中修改其多個內嵌的子文檔, 也是原子性的.
在一個寫操作同時修改多個文檔的情況, 對其中單獨的某個文檔而言是原子的, 但是對整批文檔而言并不是原子的, 其他的操作很可能會交錯修改數據. 然而, 可以通過使用$isolated操作符, 隔離某個修改多個文檔的寫操作.

$isolated 操作符

通過使用$isolated操作符, 多文檔寫操作一旦開始寫第一個文檔,就會阻止其他進程交錯修改. 這就確保了沒有客戶端可以看到數據變化, 直到寫操作成功或者報錯.

$isolated操作符不支持sharded clusters

然而 isolated 寫操作無法提供 “all-or-nothing” 原子性的保障. 這意味著寫操作出錯時, 無法回滾發(fā)生錯誤之前的所有的變化.

注意:
$isolated 操作符會導致寫操作請求一個集合級別的排它鎖, 即使使用了支持文檔級別鎖的 WiredTiger 存儲引擎的情況下也一樣. 這意味著, $isolated 操作符會使得 WiredTiger 在操作期間單線程化.

再次重申一遍, $isolated操作符不支持sharded clusters

使用$isolated操作符的更新操作的例子, 請參見: $isolated
使用$isolated操作符刪除操作的例子, 請參見: Isolate Remove Operations.

類事務語義

單個文檔中可以內嵌多個子文檔, 所以單文檔原子性可以滿足多數實際使用需求.對于涉及多文檔的寫操作序列必須作為一個單獨的事務對待的情況, 可以在應用中實現一個two-phase commits 兩步提交. 然而, two-phase commits只能提供類似事務的語義. 使用two-phase commits可以確保數據的一致性(最終結果的一致性), 但是可能會使得應用程序(不小心)讀到在two-phase commits或rollback期間產生的中間數據.

關于two-phase commit 和 rollback的更多信息, 請參見: Perform Two Phase Commits

并發(fā)控制

并發(fā)控制允許多個應用并發(fā)執(zhí)行, 不會導致數據的不一致性或沖突. 方法一是在一個字段上創(chuàng)建一個唯一索引, 使得該字段只能有一個唯一的值. 這樣就避免了插入或更新時帶來重復數據. 對于多個字段, 在其上創(chuàng)建唯一索引來強制這些個字段值組合的唯一性. 例子請參見 update() and Unique IndexfindAndModify() and Unique Index. 另一個方法是為寫操作在查詢謂詞中指定字段所期望的當前值, 具體例子請參見: Update if Current

two-phase commit 模式提供了一個變種, 在查詢操作中, 其查詢謂詞中使用應用程序標識代替了某種期待的數據狀態(tài)值.

請參閱

Read Isolation, Consistency, and Recency

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末乡洼,一起剝皮案震驚了整個濱河市承二,隨后出現的幾起案子箫攀,更是在濱河造成了極大的恐慌赠法,老刑警劉巖蓬痒,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件双藕,死亡現場離奇詭異吝沫,居然都是意外死亡僵刮,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門岖圈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讹语,“玉大人,你說我怎么就攤上這事蜂科⊥缇觯” “怎么了短条?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長才菠。 經常有香客問我茸时,道長,這世上最難降的妖魔是什么赋访? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任可都,我火速辦了婚禮,結果婚禮上进每,老公的妹妹穿的比我還像新娘汹粤。我一直安慰自己,他們只是感情好田晚,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布嘱兼。 她就那樣靜靜地躺著,像睡著了一般贤徒。 火紅的嫁衣襯著肌膚如雪芹壕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天接奈,我揣著相機與錄音踢涌,去河邊找鬼。 笑死序宦,一個胖子當著我的面吹牛睁壁,可吹牛的內容都是我干的。 我是一名探鬼主播互捌,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼潘明,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了秕噪?” 一聲冷哼從身側響起钳降,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腌巾,沒想到半個月后遂填,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡澈蝙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年吓坚,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灯荧。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡礁击,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情客税,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布撕贞,位于F島的核電站更耻,受9級特大地震影響,放射性物質發(fā)生泄漏捏膨。R本人自食惡果不足惜秧均,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望号涯。 院中可真熱鬧目胡,春花似錦、人聲如沸链快。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽域蜗。三九已至巨双,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間霉祸,已是汗流浹背筑累。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丝蹭,地道東北人慢宗。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像奔穿,于是被迫代替她去往敵國和親镜沽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理巫橄,服務發(fā)現淘邻,斷路器,智...
    卡卡羅2017閱讀 134,702評論 18 139
  • 很實用的編程英語詞庫湘换,共收錄一千五百余條詞匯宾舅。 第一部分: application 應用程式 應用、應用程序app...
    春天的蜜蜂閱讀 1,365評論 0 22
  • 本次學習使用的是麥子學院的《mongodb最佳實踐課程》.侵刪. 安裝數據庫 在ubuntu下mongodb默認已...
    whaike閱讀 1,377評論 1 6
  • Java基礎常見英語詞匯(共70個)['?bd?ekt] ['?:rientid]導向的 ...
    今夜子辰閱讀 3,305評論 1 34
  • 這豎勾太難了彩倚,寫得都急頭白臉了筹我。明天繼續(xù)豎勾。
    默巖yan閱讀 191評論 1 1