想象一下以下情況:集羣鍵/值數據庫:最近的記錄
在計算機網絡上存在一個分佈式鍵/值數據庫。一臺提取請求的中央「主」計算機,以及多臺存儲部分數據的子機。 也就是說像這樣:
main computer
|
+--child A
+--child B
+--child C
.....
即, 「星形」拓撲。
附加說明:數據庫的重疊
- 部分,並用相同的「鑰匙」幾個不同的版本記錄可以存儲在在同一時間多臺機器。
- 密鑰不保證存在於所有機器或特定機器上。
- 「兒童」不會相互同步數據。
- 通過主計算機請求/讀取數據,主計算機必須返回請求密鑰的最新版本的數據。
- 數據僅通過兒童書寫 - 他們從多個來源接收新值。
- 數據永遠不會被刪除。
現在的主要問題:
採用這種結構形式,我該如何確定哪個版本是最新的?
我能想到的兩種方法來解決這一問題:
- 添加時間戳每個記錄,當它被寫入到數據庫瓶子機,使用時間戳來確定版本。
- 使用「修訂號」或「寫入操作索引」(由主計算機發出,每寫操作增加1)而不是時間戳。
然而,這兩種方法都是不完美:
第一個方法要求所有機器完美的時鐘同步,否則系統將無法提供最近的記錄值。
第二種方法會導致每個孩子通過網絡向主機詢問時間戳,這將引入寫入延遲,並且主機必須被互斥鎖鎖定,因此多線程性能將受到影響。
有什麼更好的方法來處理這種情況? 真正的集羣數據庫如何處理這種情況(集羣中最新的記錄版本)?