【发布时间】:2015-02-22 11:42:06
【问题描述】:
在article on BASE as an ACID alternative 中,Dan Pritchett 提出了一种用于将跨越两个表的事务解耦的选项,Transaction 表(例如买/卖交易)和 User 表:
Dan 还认为这种方法存在问题:
消息持久化在事务主机上,避免2PC 排队期间。如果消息在事务中出列 涉及到用户主机,我们还是有2PC的情况。
我假设消息传递是持久消息传递,因此可以保证传递。在这种情况下,我希望 Dequeue 操作对 Queue 操作没有影响,从而完全解耦 Transaction 和 User 表的更新,从而避免这两个表之间的 2PC表?会有 2PC,但那将是:
-
2PC边界1:
- 插入事务表并
- 插入到消息队列消息持久化表中
-
2PC边界2:
- 更新用户表和
- 从消息队列持久表中删除消息
有人能澄清我在哪里考虑这个错误吗?
【问题讨论】:
标签: database transactions message-queue acid eventual-consistency