是否可以使用CRDT实现交易



根据定义,CRDT(无冲突的复制数据类型(是无冲突的。因此,这意味着在一个节点上进行的任何更新最终都将应用(合并(到所有其他节点上。

因此,这让我假设,如果环境处于正常状态(没有硬件故障等(,CRDT不能在逻辑上限制、拒绝或拒绝进行一些更新

另一方面,根据定义,事务应该被接受或拒绝,如果不满足某些要求——如果检测到一些冲突——则回滚。因此,这意味着事务(基于冲突(不能用CRDT(无冲突的(来实现。是这样吗?

让我们考虑一个例子——简单的银行账户。余额是一个非负数。我试着用PN计数器(正负计数器(来实现它。我想让它成为非负的——如果余额低于零,就限制支出。但这似乎是不可能的。已经用PN计数器实现了,它将允许低于零。或者,如果我想限制这一点,我需要同步(锁定(所有节点以获得确认。

如果有可能用CRDT实现一个简单的事务,请描述一下给定的例子——非负数——是如何实现的。

您似乎在这里描述了两个独立的问题:

  1. 初始问题:是否可以在CRDT中实现事务是的。事实上,有两种事务协议明确表示它们可以针对CRDT:RAMP和CURE。后者提供了中止机制
  2. 您的示例案例:是否可以实现非负计数器是的。事实上,Bounded Counter正是这样做的。然而,它也有其局限性,并且当时只能在单个值上工作

你很可能需要两者结合才能实现目标。

请记住,事务不一定必须提供中止机制或条件更新(事实上,RAMP事务协议不保证其中任何一个(-事务主要是关于在多值更新面前应用程序状态的一致性视图。

PS:根据您的用例,还有其他问题(如使用CRDT的有效性或计数器为非负的要求(,但这些问题不符合StackOverflow的要求。

最新更新