Hadoop 如何在CouchDB中实现分布式事务?

Hadoop 如何在CouchDB中实现分布式事务?,hadoop,couchdb,distributed-transactions,Hadoop,Couchdb,Distributed Transactions,我们正在将数据库从oracle移动到couchDB,因为其中一个用例是实现分布式事务管理。 例如:从JMS队列读取数据并在多个文档中更新它,如果任何事情失败,则恢复并向JMS队列抛出异常。 正如我们所知,couchDB不支持分布式事务管理。 你能提出任何替代策略来实现这一点或任何其他出路吗 CouchDB没有分布式事务所需的属性,因此不可能。所有主要的分布式事务算法(两阶段提交协议、RAMP和Percolator风格的分布式事务,您可以在本文中找到详细信息)都需要记录级别的线性化。不幸的是,Co

我们正在将数据库从oracle移动到couchDB,因为其中一个用例是实现分布式事务管理。 例如:从JMS队列读取数据并在多个文档中更新它,如果任何事情失败,则恢复并向JMS队列抛出异常。 正如我们所知,couchDB不支持分布式事务管理。
你能提出任何替代策略来实现这一点或任何其他出路吗

CouchDB没有分布式事务所需的属性,因此不可能。所有主要的分布式事务算法(两阶段提交协议、RAMP和Percolator风格的分布式事务,您可以在本文中找到详细信息)都需要记录级别的线性化。不幸的是,CouchDB是一个AP解决方案(在CAP定理的意义上),所以它甚至不能保证记录级别的一致性


当然,您可以禁用复制以使CouchDB保持一致,但这样您将失去容错能力。另一种选择是使用CouchDB作为存储,并在其上构建一致的数据库,但这对于您的任务来说是一种过分的做法,并且不使用任何CouchDB特定的功能。第三种选择是使用CRDT,但它只在您的事务是可交换的情况下起作用。

除了技术方面,我觉得您可能对其底线感兴趣

正如前面提到的,分布式事务是不可能的——这个概念甚至不存在,因为它不是必需的。事实上,与关系世界不同,95%的时候,当你觉得你需要他们时,这意味着你做错了什么

我将直截了当地告诉您:将关系数据转储到couchdb最终将成为写操作和读操作的噩梦。对于第一个问题,您会说:我如何进行交易?对于拉特一家:我怎么做?两者都是不可能的,甚至是根本不存在的概念

太多人得出的方便的结论是“CouchDb还没有做好企业准备或者不够酸”。但事实是,您需要花时间重新思考您的数据结构

您需要重新考虑您的数据结构,并使其面向文档,因为如果不这样做,您就偏离了couchdb的预期用途——您知道这是一个危险的领域

阅读DDD和聚合设计,并将您的记录转换为DDD实体和聚合。因此CouchDb将有一个ETL层。如果你没有时间这么做,我建议你不要使用CouchDb,因为我非常喜欢它

请参阅本帖: