Rethinkdb复制和数据一致性
Rethinkdb replication and data consistency
当其中一个副本死亡时会发生什么temporary/permanently,它与数据一致性有何关系?
例如让我们考虑这种情况:
我更新了 fruits
table 中的文档,
rethinkdb 回答我好,然后立即流星命中这个数据库
但幸运的是,我的集群配置满足以下要求:
http://www.rethinkdb.com/docs/failover/
但在这种情况下,我似乎丢失了这个特定的更新,可能还丢失了其他尚未复制的内容,而应用程序仍然认为数据已可靠保存...
我不太明白我应该如何设计我的应用程序以使其能够容忍这种行为,它似乎非常复杂
常见的做法是什么?
有什么建议吗?
谢谢
RethinkDB 在写入传播到 table 的大多数副本之前不会确认写入。因此,除非不止一台服务器同时发生故障(假设您总共有 3 个副本),否则您永远不会丢失已确认的写入。
唯一的例外是您将 table 上的 write_acks
显式设置为 "single"
。您可以在 http://www.rethinkdb.com/docs/consistency/
中找到有关此设置及其后果的更多详细信息
集群环境下的一致性需要consensus算法,RetihnkDB背后的算法是RAFT。 RAFT 共识算法需要至少 3 个节点来考虑 strong-ish 数据的一致性。
您可以阅读第一篇博客post
当其中一个副本死亡时会发生什么temporary/permanently,它与数据一致性有何关系?
例如让我们考虑这种情况:
我更新了 fruits
table 中的文档,
rethinkdb 回答我好,然后立即流星命中这个数据库
但幸运的是,我的集群配置满足以下要求: http://www.rethinkdb.com/docs/failover/
但在这种情况下,我似乎丢失了这个特定的更新,可能还丢失了其他尚未复制的内容,而应用程序仍然认为数据已可靠保存...
我不太明白我应该如何设计我的应用程序以使其能够容忍这种行为,它似乎非常复杂
常见的做法是什么? 有什么建议吗?
谢谢
RethinkDB 在写入传播到 table 的大多数副本之前不会确认写入。因此,除非不止一台服务器同时发生故障(假设您总共有 3 个副本),否则您永远不会丢失已确认的写入。
唯一的例外是您将 table 上的 write_acks
显式设置为 "single"
。您可以在 http://www.rethinkdb.com/docs/consistency/
集群环境下的一致性需要consensus算法,RetihnkDB背后的算法是RAFT。 RAFT 共识算法需要至少 3 个节点来考虑 strong-ish 数据的一致性。
您可以阅读第一篇博客post