為 Key Value 資料庫實現MVCC 事務

2021-06-20 03:49:39 字數 873 閱讀 2990

acid是軟體領域使用最廣泛的技術之一,它是關聯式資料庫的基石,是企業級中介軟體不可或缺的部分,但通常通過黑盒的方式提供。但是在許多情況下,這種古老的事務方式已經不能夠適應現代大規模系統和nosql資料庫的需要了,現代系統要求更高的效能要求,更大的資料量,更高的可用性。在這種情況下,傳統的事務模型被定製的事務或者半事務模型所取代,而在這些模型中事務性並不像以往那樣被看重。

在本文中我們會討論一下key-value資料庫的無鎖事務操作,這種技術可以廣泛應用於任何一種資料庫系統。在griddynamics中,我們就用這種技術在oracle coherence上實現了乙個輕量級的非標準的事務機制。在第一部分我們會通過幾個重要的用例來了解兩種簡單的方法,在第二部分我們會研究更多更通用的方法,比如說postgresql的mvcc實現。

原子性快取切換,讀提交隔離

讓我們從乙個簡單易於實現的方法開始,這個方法適用於讀遠多於寫的系統。比如說電子商務系統中每天要進行的資料更新,一些管理性操作例如無效貨品的修復以及快取更新。

最簡單的例子是把所有資料都載入進快取裡,然後通過乙個**介面來執行諸如 get() 和 put() 這樣的操作。這個介面會與兩個快取打交道,a和b,按照以下邏輯執行(圖 1):

任何時候只能有乙個快取處於可用狀態,**介面會把所有的請求路由給它(圖1.1)。

更新資料的時候把新資料載入到目前不可用的快取中(圖1.2)。

更新程序切換標誌哪個快取可用的標記(圖1.3),**介面開始把新的讀請求分發到新標記為可用的快取。

快取切換階段的事務可以依據不用的永續性和隔離性要求來分別處理。如果允許「不可重複讀」 ,那麼切換很簡單,老資料會被立刻清理掉。否則,**介面會維護乙個仍未結束的事務列表,並把屬於這個列表中的每乙個請求都路由到原來的快取中。只有當列表中的所有事物都提交或者放棄之後老資料才會被清空。

key value資料庫優點

1 乙個 key value 資料儲存系統,只支援一些基本操作,如 set key,value 和 get key 等 2 分布式 多台機器 nodes 同時儲存資料和狀態,彼此交換訊息來保持資料一致,可視為乙個完整的儲存系統。3 資料一致 所有機器上的資料都是同步更新的 不用擔心得到不一致的結果 ...

超高效能 key value 資料庫 Redis

redis是乙個高效能的key value資料庫。redis的出現,很大程度補償了memcached這類keyvalue儲存的不足,在部 分場合可以對關聯式資料庫起到很好的補充作用。它提供了python,ruby,erlang,php客戶端,使用很方便。前幾天微博發生了一起大的系統故障,很多技術的朋...

高效能的Key Value資料庫 Redis

關係型資料庫與nosql資料庫並非對立而是互補的關係,即通常情況下使用關係型資料庫,在適合使用nosql的時候使用nosql資料庫,讓nosql資料庫對關係型資料庫的不足進行彌補。一般會將資料儲存在關係型資料庫中,在nosql資料庫中備份儲存關係型資料庫的資料 相關產品 tokyo cabinet ...