gpt4 book ai didi

java - 如何管理多个数据库上的事务

转载 作者:行者123 更新时间:2023-11-29 12:58:36 25 4
gpt4 key购买 nike

我有一个 Web 应用程序,它接收将订单保存在数据库中的请求。我想写入 2 个不同的数据库 - 一个 Cassandra 实例和一个 PostgreSQL 实例。我使用的是纯 Java 和 JDBC(带有 apache DBUtis),前端有一个轻量级 Web 应用程序库。

我不确定的是如何跨两个数据库实现事务性,即如果对其中一个数据库的写入失败,则回滚另一个写入并将错误消息放入错误日志中。

Java 中是否有任何机制来实现这一点?我知道两阶段提交这样的事情,这是我在这里寻找的吗?有没有其他选择?

最佳答案

Cassandra 和 PostgreSQL 都支持线性化和比较并设置 (CAS),因此您可以在客户端实现事务。

如果你想要Serializable Isolation level那么你应该看看Percolator's transactions . Percolator 的交易在业内颇为知名,并已在亚马逊的 DynamoDB transaction library 中使用。 , 在 CockroachDB database以及 Google 的 Pecolator 系统本身。 step-by-step visualization Percolator 的交易可能有助于您理解它。

如果您预料到争用并且可以处理 Read Committed 隔离级别,那么 RAMP transactions Peter Bailis 的作品可能适合您。我还创建了一个 step-by-step RAMP visualization .

第三种方法是使用补偿事务,也称为 saga 模式。 80 年代后期在 Sagas 中对其进行了描述纸上谈兵,但随着分布式系统的兴起变得更加实际。请参阅Applying the Saga Pattern谈论灵感。

关于java - 如何管理多个数据库上的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36357429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com