簡體   English   中英

如何在多個數據庫上管理事務

[英]How to manage transactions over multiple databases

我有一個Web應用程序,它接收將訂單保存到數據庫中的請求。 我想寫入2個不同的數據庫-一個Cassandra實例和一個PostgreSQL實例。 我在前面使用輕量級Web應用程序庫的純Java和JDBC(以及apache DBUtis)。

我不確定的是如何在兩個數據庫之間實現事務性,即,如果對其中一個數據庫的寫操作失敗,則回滾另一個寫操作,並將錯誤消息放入錯誤日志中。

Java中是否有任何機制可以實現這一點? 我知道諸如兩階段提交之類的東西,這就是我在這里要尋找的東西嗎? 還有其他選擇嗎?

Cassandra和PostgreSQL都支持線性化和比較設置(CAS),因此您可以在客戶端實現事務。

如果您需要可序列化隔離級別,則應查看過濾器的事務 Percolator的交易在業界已廣為人知,並已在Amazon的DynamoDB交易庫CockroachDB數據庫和Google的Pecolator系統本身中使用。 滲透過濾器交易的逐步可視化可以幫助您理解它。

如果您期望爭用並且可以處理“讀已提交”隔離級別,那么Peter Bailis的RAMP事務可能適合您。 我還創建了分步的RAMP可視化

第三種方法是使用補償交易,也稱為“傳奇模式”。 Sagas論文在80年代后期描述了這種方法,但是隨着分布式系統的興起 ,這種方法變得更加實際。 請參閱“ 應用傳奇模式”演講以獲取靈感。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM