【发布时间】:2016-07-21 07:48:16
【问题描述】:
我有一个 Web 应用程序,它接收将订单保存在数据库中的请求。我想写入 2 个不同的数据库——一个 Cassandra 实例和一个 PostgreSQL 实例。我使用的是纯 Java 和 JDBC(带有 apache DBUtis),前面有一个轻量级 Web 应用程序库。
我不确定的是如何跨两个数据库实现事务性,即如果对其中一个数据库的写入失败,则回滚另一个写入并将错误消息放入错误日志中。
Java 中是否有任何机制来实现这一点?我知道诸如两阶段提交之类的事情,这就是我要在这里寻找的吗?有其他选择吗?
【问题讨论】:
-
请看here,它建议不要这样做。您能否更新您的问题,让我们知道您打算如何使用这两个数据库?
-
我没有标记它,因为我们可能会发现他不需要在一个事务中写入两个数据库。或许找到他的业务逻辑的替代方案可以避免两个数据库事务。
-
我同意蒂姆的观点,这是一个坏主意,除非两个写入彼此不相关,或者不会/不能相互影响,或者不会丢失一些关键的东西。跨度>
-
这个概念叫做two phase commit。 Postgres 支持这个postgresql.org/docs/current/static/sql-prepare-transaction.html。不了解 Cassandra
标签: java postgresql distributed-transactions