我想澄清Cassandra中复制因子和一致性级别的非常基本的概念.如果有人可以提供以下问题的答案,请高度赞赏.
RF复制因子RC-读取一致性WC-写入一致性
2个cassandra节点(例如:A,B)RF = 1,RC = ONE,WC = ONE或ANY
3个cassandra节点(例如:A,B,C)RF = 2,RC = QUORUM,WC = QUORUM
3个cassandra节点(例如:A,B,C)RF = 3,RC = QUORUM,WC = QUORUM
Don*_*son 97
简短摘要:复制因子描述了存在多少份数据副本.一致性级别描述客户端看到的行为.也许有更好的方法对这些进行分类.
例如,复制因子为2.编写时,假设有足够的节点,则始终存储两个副本.当一个节点关闭时,该节点的写入被隐藏起来并在它恢复时被写入,除非它足够长,以至于Cassandra决定它已经消失了.
现在说在那个例子中你用一致性等级写作.在对一个节点进行写入之后,客户端将收到成功确认,而不等待第二次写入.如果您使用CL为ALL进行写入,则对客户端的确认将等待,直到写入两个副本.还有很多其他一致性级别选项,这些选项太多而无法覆盖所有变体.但是,阅读Datastax doc,它可以很好地解释它们.
在同一示例中,如果您使用一致性级别ONE读取,则响应将在单个副本响应后发送到客户端.另一个副本可能有更新的数据,在这种情况下,响应将不是最新的.在许多情况下,这已经足够了.在其他情况下,客户端将需要最新的信息,并且您将在读取时使用不同的一致性级别 - 也许是级别ALL.通过这种方式,Cassandra和其他后关系数据库的一致性可以通过关系数据库通常不可调整的方式进行调整.
现在回到你的例子.
示例一:是的,您可以写入A并从B读取,即使B没有自己的副本.B将代表您的客户向A询问.对于节点全部启动的其他情况也是如此.当他们全部成功时,你可以写一个并从另一个读.
对于写入,使用WC = ONE,如果单个副本的节点已启动并且是您要连接的节点,则写入将成功.如果它是另一个节点,写入将失败.如果您使用ANY,则写入将成功,假设您正在与正在进行的节点通信.我想你也必须为此启用暗示切换.down节点将在稍后获取数据,并且在发生之后您将无法读取它,甚至不会从该节点开始读取.
在另外两个示例中,复制因子将影响最终写入的副本数,但不会影响客户端行为,超出上文所述.QUORUM将影响客户端行为,因为您必须拥有足够数量的节点并响应写入和读取.如果你运气好,并且至少(nodes/2)+ 1个节点在你需要的节点之外,那么写入和读取将成功.如果没有足够的节点包含副本,则读取和写入将失败.总的来说,如果节点关闭,一些QUORUM读取和写入可以成功,假设该节点不需要存储您的副本,或者它的中断仍然留下足够的副本节点可用.
bca*_*tle 44
看看这个简单的计算器,它可以让你模拟不同的场景:
http://www.ecyrd.com/cassandracalculator/
例如,有2个节点,复制因子为1,读取一致性= 1,写入一致性= 1:
Your reads are consistent
You can survive the loss of no nodes.
You are really reading from 1 node every time.
You are really writing to 1 node every time.
Each node holds 50% of your data.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46195 次 |
| 最近记录: |