2016-07-30 28 views
3

我正在閱讀dbms書,正如我所瞭解的,Mvcc(多版本併發控制)用於高併發讀寫事務。 但是「搜索結構的併發控制」一章提到了B樹的不同鎖定概念(鎖定耦合,鏈接技術等)。MVCC&B-Tree&Concurrency

Mvcc不適用於B-Tree的dbms內部和葉節點嗎? B-Tree併發性和MVCC completeley是不同的東西嗎?如果是這樣的話,Mvvc如何在dbms中實現?

回答

2

MVCC可以以各種方式實施。唯一的要求是可以使用舊的行版本。

例如,SQL Server將它們存儲在臨時數據庫中,該數據庫在服務器重新啓動時重置。

Postgres將行版本作爲隱藏行直接存儲在B樹中。它向樹添加一個隱藏的鍵列。從樹中讀取只顯示邏輯上應該看到的版本。

RavenDB的Voron將b-tree頁面作爲不可變數據來管理。寫入創建全新的樹。因此MVCC被實現爲從正確的不可變樹讀取。

數據庫很少鎖定物理結構很長時間。啓用數據庫客戶端以停止數據庫內部結構的進度不是一個好主意。內部結構通常非常簡短。邏輯行鎖被分開處理。如果我不得不猜測concurrency control on search structures是指物理線程安全。這通常不涉及MVCC,因爲不需要管理多個版本。正常的內存鎖對於簡短訪問就足夠了。