为什么mongo只能提供 库级粒度锁



  • 如题,为什么mongo只能提供 库级粒度锁?


  • Lv 1

    MongoDB的鎖機制和一般關聯式資料庫如 MySQL(InnoDB), Oracle 有很大的差異,InnoDB 和 Oracle 能提供行級細微性鎖,而 MongoDB 只能提供 庫級細微性鎖,這意味著當 MongoDB 一個寫鎖處於佔用狀態時,其它的讀寫操作都得乾等。

    初看起來庫級鎖在大併發環境下有嚴重的問題,但是 MongoDB 依然能夠保持大併發量和高性能,這是因為 MongoDB 的鎖細微性雖然很粗放,但是在鎖處理機制和關聯式資料庫鎖有很大差異,主要表現在:

    • MongoDB 沒有完整事務支援,操作原子性只到單個 document 級別,所以通常操作細微性比較小;
    • MongoDB 鎖實際佔用時間是記憶體資料計算和變更時間,通常很快;
    • MongoDB 鎖有一種臨時放棄機制,當出現需要等待慢速 IO 讀寫資料時,可以先臨時放棄,等 IO 完成之後再重新獲取鎖。


    資料來源:

    本帖下載内容已隐藏,请登入以查看隐藏内容!


  • 大中华区MongoDB顾问

    库级锁的概念是在MongoDB3.0的WiredTiger出现之前,算算时间应该是在14年底推出,正好在博客发表半年后。

    使用WiredTiger引擎时锁的粒度为文档级,同时3.0之后也对MMAPv1引擎进行了调整,锁的粒度变为集合级。


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待