0

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

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

另一方面,根据定义,事务应该被接受或拒绝,如果不满足某些要求则回滚 - 如果检测到某些冲突。所以这意味着事务(基于冲突)不能用 CRDT(无冲突)实现。那正确吗?

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

如果可以使用 CRDT 实现简单的交易,您能否描述一下给定示例的可能性 - 非负数。

4

1 回答 1

1

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

  1. 最初的问题:是否可以在 CRDT 中实现交易?是的。事实上,有两种交易协议明确声明它们可以针对 CRDT:RAMPCURE。后者提供中止机制。
  2. 您的示例案例:是否可以实现非负计数器?是的。事实上, Bounded Counter正是这样做的。但是,它有其局限性,并且当时仅适用于单个值。

您很可能需要将两者结合起来才能实现您的目标。

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

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

于 2021-11-05T10:27:13.410 回答