【发布时间】:2013-01-03 02:17:29
【问题描述】:
是否存在支持对标量值进行幂等操作的分布式高可用性、最终一致的数据库?
如果我们使用正常更新,那么我们有可能在不同的节点上有 2 个不同的值,并且没有一个值是正确的,因为我们需要增加两个交易值的金额。
是否有一个分布式数据库,我可以在其中发送命令 increase(key, attribute[column], diff) 以便当我收到响应时,我可以确定无论当前值如何,该操作都会在其他副本上执行的帐户?这样,即使 2 个不同的节点增加了不同的值,我也将获得最终一致性的增加操作,因为这种增加会传播到其他副本。
我不是在谈论条件更新,因为它不适用于像 cassandra 这样的高可用性数据库(这就是他们没有该功能的原因),我对原子增加操作感兴趣。
谢谢。
附: 在幂等增加的情况下,我将有一个命令增加(key,attribute,diff,lock_key),这样如果 db 已经收到具有相同 lock_key 的相同命令,则它不会增加
tl;博士:
有没有办法在分布式 AP 类数据库中进行精确计数器? 2个问题: 1)如果我发送操作以增加计数器但我没有得到响应,我会再次发送该请求但不想增加计数器两次。 2)如果该计数器在另一个副本上同时更新,我想最终结合这个增加,而不是覆盖这些值。 那么是否有像 increase("John's balance", +5.67, "sdfsdfas") 这样的命令,其中 sdfsdfas 是一个用于丢弃重复更新的字符串。有没有复制这种命令的数据库?
【问题讨论】:
-
我不确定我是否理解这将是有用的场景。如果所有副本必须始终保持相同的值至关重要,那么它们必须保持同步。 “幂等更新”对此有何帮助?
-
如何只使用任何带有复制的数据库,然后等效地使用
insert into increase_operations (target_id, increase_amount, operation_id),然后使用 sum() 来获得胜利? operation_id 是您识别重复操作的方式。它肯定最终是一致的。
标签: database nosql cassandra high-availability eventual-consistency