【发布时间】:2019-02-05 06:04:03
【问题描述】:
如何使用 Gun 创建 CRDT?
例如,如果我想实现一个只增长的数组,其中每个元素都指向下一个元素,我该如何解决冲突?
为简化起见,让我们创建一个 Alice 和 Bob 合作的场景。
该数组包含 3 个元素,[a, b, d]。
这个数组的内部表示是这样的链表:
a => b => c
(当然,内部表示形式类似于{value: 'a', next: { value: 'b' next: { value: 'c' }}}),但我认为您使用更简洁的符号表示我的意思。
Alice 现在想在 b 和 d 之间插入元素 c。
同时,Bob 想要在 b 和 d 之间插入元素 C。
同时,它们具有数组的这种内部表示:
爱丽丝:a => b => c => d
鲍勃:a => b => C => d
当他们加入 CRDT 时,他们会收敛到以下任一值:
a => b => c => C => d
或
a => b => C => c => d
无论如何,a) 它们都会收敛到相同的值,并且 b) 它们不会丢失彼此的数据。
我们可以使用 Gun 实现这一点吗?
(本题是对https://github.com/amark/gun/issues/602的简化和后续问题)
【问题讨论】: