簡體   English   中英

如何在MongoDB中管理並發?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM