[英]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.