[英]How to manage concurrency in MongoDB?
我是MongoDB數據庫的新手,對於我的應用程序之一,我計划將其中的一部分遷移到MongoDB。 我們需要處理樂觀並發的地方。 MongoDB提供了哪些最佳實踐。
MongoDB是否是需要並發的應用程序的正確選擇?
是的,MongoDB是並發的正確選擇。
MongoDB鎖定與RDBMS中的鎖定不同。
MongoDB使用多粒度鎖定(請參見“有線老虎”),該鎖定允許操作鎖定在全局,數據庫或集合級別,並允許各個存儲引擎在集合級別(例如,文檔級別的以下級別)中實現其自己的並發控制。 WiredTiger)。
MongoDB使用讀取器-寫入器鎖,允許並發的讀取器共享對資源(例如數據庫或集合)的訪問,但是在MMAPv1中,它授予對單個寫入操作的獨占訪問權限。
WiredTiger使用樂觀並發控制。 WiredTiger僅在全局,數據庫和集合級別使用意圖鎖。 當存儲引擎檢測到兩個操作之間存在沖突時,將引發寫沖突,從而導致MongoDB透明地重試該操作。
MongoDB為每個數據庫都有一個讀取器/寫入器閂鎖。
鎖存器是多個讀取器,是單個寫入器,並且它是寫入器貪婪的,因此我們在數據庫中可以同時具有無限數量的同時讀取器,但是在任何一個數據庫中的任何集合上一次只能有一個寫入器。
“ writer-greedy”賦予寫入優先級,因此當我們收到寫入請求時,所有讀取請求都將被阻塞,直到寫入完成。
此處的鎖稱為“閂鎖”,因為它比鎖輕,並且可以在幾微秒內完成工作。
MongoDB能夠運行盡可能多的同時查詢。
希望能幫助到你!!
參考文獻
https://docs.mongodb.com/manual/faq/concurrency/
https://docs.mongodb.com/manual/reference/command/findAndModify/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.