我们正在将我们的数据库从oracle迁移到couchDB,因为其中一个用例是实现分布式事务管理。对于Ex:从JMS队列读取数据并在多个文档中更新它,如果任何事情失败,则恢复并向JMS队列抛出异常。正如我们所知,couchDB不支持分布式事务管理。你能建议任何替代策略来实现这一点或任何其他出路吗?
发布于 2016-05-30 17:11:20
除了技术方面,我觉得你可能会对它的底线感兴趣。
如上所述,分布式事务是不可能的--这个概念甚至不存在,因为它不是必需的。事实上,与关系世界不同的是,95%的时间当你觉得你需要它们时,这意味着你做错了什么。
我将直截了当地告诉您:将关系数据转储到couchdb最终将成为写入和读取的噩梦。对于第一个问题,您会说:我如何进行事务处理?对于后面的人:我如何做连接?两者都是不可能的,都是甚至不存在的概念。
太多人得出的方便的结论是:"CouchDb不是企业级的,也不够苛刻“。但事实是,您需要花时间重新考虑您的数据结构。
您需要重新考虑您的数据结构,并使其面向文档,因为如果您不这样做,您就偏离了couchdb的预期用途-正如您所知道的,这是一个有风险的领域。
阅读DDD和聚合设计,并将您的记录转换为DDD实体和聚合。所以会有一个CouchDb的ETL层。如果您没有时间这样做,我建议您不要使用CouchDb -尽管我非常喜欢它。
发布于 2016-05-25 01:51:59
CouchDB没有分布式事务所必需的属性,所以这是不可能的。所有主要的分布式事务算法(两阶段提交协议、RAMP和渗透器样式的分布式事务,您可以在此answer中找到详细信息)都需要在记录级别上的线性化。不幸的是,CouchDB是一个AP解决方案(在CAP定理意义上),所以它甚至不能保证记录级的一致性。
当然,您可以禁用复制以使CouchDB保持一致,但这样会失去容错能力。另一种选择是使用CouchDB作为存储,并在其上构建一致的数据库,但这对您的任务来说有点过头了,并且不使用任何特定于CouchDB的特性。第三种选择是使用CRDT,但只有当您的事务是可交换的时,它才有效。
https://stackoverflow.com/questions/37387890
复制相似问题