[英]What constitutes a transaction layer when talking about database systems?
鑒於您的數據庫是單線程的,您可以執行以下操作:
使用 leveldb 批處理功能:不是覆蓋舊密鑰,而是創建一個新密鑰。 還記錄鍵的舊值和新值。
如果此時數據庫崩潰,請查找日志記錄並通過將作為事務一部分的鍵恢復為它們的舊值來回滾事務。 刪除日志完成回滾。
如果事務已提交,則刪除舊密鑰並刪除日志條目以完成提交。
然后你有一個使用多個版本的單線程鍵/值存儲事務。
如果數據庫是多線程的,則必須使用 MVCC(請參閱 Yahoo 的 Omid、PostgreSQL、Wiredtiger、bsddb...)和諸如 Precisely Serializable Snapshot Isolation (PSSI) 之類的東西。
定義事務的方法多種多樣,實現它們的方法也多種多樣。 事務的一個共同屬性是它是 ACID:
一個事務可能有幾種狀態:
LevelDB 不支持事務,但是它有一些 ACID 屬性:
所以......回到你的問題:
問:
該層必須做什么才能將事務支持添加到不支持事務的較低級別的庫中?
A:這取決於你如何定義交易。 如果您使用上述屬性定義一個事務,並且您希望您的事務是 ACID,那么您必須弄清楚 LevelDB 是否可行(大多數 ACID 屬性已集成)然后您必須圍繞 LevelDB 編寫一個包裝器,以確保正確維護事務的狀態。 但是,我不完全確定單獨的包裝器是否可以做到這一點,因此您可能必須實際獲取源代碼並對其進行修改才能真正支持事務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.