Java 如何处理跨数据库事务

Java 如何处理跨数据库事务,java,database,transactions,nosql,Java,Database,Transactions,Nosql,我需要处理跨数据库事务。具体要求如下: 我有2分贝A和B 1) 两个数据库最终必须同步。两个数据库必须是最终一致性,而不是严格一致性。记录可能存在于数据库A中,也可能在一段时间内不存在于数据库B中。 但最终它必须出现在两个数据库中 2) 两个数据库都不支持事务/回滚 3) 一旦在Db B中提交,就不能撤消/删除它。但可以从DB1中删除记录 4) 丢失一些数据没关系。一天可能有10张唱片 一种解决办法如下: 1) 写入DB1 2) 然后在DB2中编写 如果写入DB2失败,则使用log4j写入文件。

我需要处理跨数据库事务。具体要求如下:

我有2分贝A和B

1) 两个数据库最终必须同步。两个数据库必须是最终一致性,而不是严格一致性。记录可能存在于数据库A中,也可能在一段时间内不存在于数据库B中。 但最终它必须出现在两个数据库中

2) 两个数据库都不支持事务/回滚

3) 一旦在Db B中提交,就不能撤消/删除它。但可以从DB1中删除记录

4) 丢失一些数据没关系。一天可能有10张唱片

一种解决办法如下:

1) 写入DB1

2) 然后在DB2中编写


如果写入DB2失败,则使用log4j写入文件。然后将读取并重试这些文件以保存在DB2中。这种方法行吗?

这被称为ACID数据库的两阶段提交

NoSQL不像ACID数据库那样处理事务。当你去NoSQL时,这是你选择放弃的事情之一


我认为您必须在处理数据库的服务中对此进行编码。

现在,为什么写入DB2会失败呢?这种类型的大多数问题要么是导致违反约束的编程错误,要么是磁盘空间不足。在后一种情况下,如果日志文件位于另一个卷上,log4j解决方案可能会有所帮助。您真正需要事务来保护它的地方是进程或机器的消亡。但这不应该一天发生10次。