【问题标题】:Replication Properties of Riak nodesRiak 节点的复制属性
【发布时间】:2018-01-09 17:51:57
【问题描述】:

使用具有 N 个节点的分区数据库。假设 W 是节点数,其中需要锁定才能写入的节点数,R 是需要锁定才能读取它们的节点数。

在哪些情况下,建议应用 W=1 & R=N 的策略?在哪些情况下我应该使用 W=N & R=1?同样在这种情况下,我不应该使用 W=1 & R=1。

据我所知 - W=N & R=1 是一致的写作。

【问题讨论】:

    标签: nodes replication riak consistency eventual-consistency


    【解决方案1】:

    首先,重要的是要了解W and R speak about replicas(又名副本)——而不是节点。例如,您的集群可能有 5 个节点,N=3。这意味着只有三个节点将拥有特定密钥的副本。

    其次,Riak 没有锁定。通过更改 R/W,您可以控制客户认为成功的内容。假设您在 N=3 时写入 W=3 的密钥,但失败了。这并不意味着没有写入任何内容,所有后续读取都将看到旧值。仍然有可能更新了一两个副本。由客户决定如何处理这样的失败,但通常是重试。在任何情况下,如果至少有一个副本成功,则新值最终将传播到所有副本(如果没有被更新的副本替换)。

    如果在上面的示例中您使用 R=1 或 R=2 读取,您可能会看到新值或旧值,具体取决于到目前为止已更新的副本数以及您首先点击的副本(显然, R=2 提供了更好的机会看到新值并启动读取修复)。当 R=3 时,每个人都可以看到相同的值——旧的(0 次成功写入)或新的(至少 1 次成功写入)。如果至少有一个副本不可用,读取也可能会失败,但至少客户端可以确定它没有看到过时的值。

    权衡是延迟。使用 W/R=1 时,客户端不必等待多次写入/读取的结果。不过,您要以一致性和可靠性付费。

    因此,如果您想要快速写入,请使用 W=1,但不要介意丢失写入(Riak 报告成功,但之后节点立即失败)。如果您想要快速读取并且不介意获取过时的值或“未找到”,请使用 R=1。

    我还要补充一点,理解 Riak 中的 slopy vs strict quorum 很重要。

    【讨论】:

    • 谢谢vempo,真的!直到现在我都无法理解它是如何工作的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    相关资源
    最近更新 更多