了解cassandra复制因子与一致性水平
我想澄清在Cassandra中非常基本的复制因子和一致性级别的概念。 非常感谢,如果有人可以提供以下问题的答案。
RF-复制因子RC-读取一致性WC-写入一致性
2个cassandra节点(例如:A,B)RF = 1,RC = ONE,WC = ONE或ANY
- 我可以向节点A写入数据并从节点B读取数据吗?
- 如果A倒下会发生什么?
3个cassandra节点(例如:A,B,C)RF = 2,RC = QUORUM,WC = QUORUM
- 我可以向节点A写入数据并从节点C读取数据吗?
- 如果节点A出现故障,会发生什么?
3个cassandra节点(例如:A,B,C)RF = 3,RC = QUORUM,WC = QUORUM
- 我可以向节点A写入数据并从节点C读取数据吗?
- 如果节点A出现故障,会发生什么?
简短摘要:复制因素描述了您的数据存在多less个副本。 一致性级别描述了客户看到的行为。 也许有更好的方法来分类这些。
例如,复制因子为2.写入时,假设有足够的节点,则始终存储两个副本。 当一个节点closures时,该节点的写入会在写回时被写入并写入,除非Cassandra认为它已经消失了。
现在说在这个例子中,你写的一致性水平为1。 在写完一个节点之后,客户端将收到成功确认,而不等待第二次写入。 如果您使用CL进行了写入操作,则客户端的确认将一直等待,直到写入两个副本。 有很多其他的一致性水平选项,太多覆盖所有的变种在这里。 但是,阅读Datastax文档可以很好地解释它们。
在同一个示例中,如果您读取的一致性级别为1,那么响应将在单个副本作出响应后发送到客户端。 另一个副本可能有更新的数据,在这种情况下,响应不会是最新的。 在很多情况下,这已经足够了。 在其他情况下,客户端需要最新的信息,并且在读取时使用不同的一致性级别 – 可能是ALL级别。 这样,Cassandra和其他后关系数据库的一致性就可以通过关系数据库通常不可调的方式来调整。
现在回到你的例子。
示例一:是的,即使B没有自己的副本,也可以写入A并从B读取。 B将代表您的客户请求A。 对于其他情况下,节点全部用完的情况也是如此。 当他们全部结束后,你可以写信给另一个人阅读。
对于写入,WC = ONE,如果单个副本的节点已启动并且是您要连接的节点,写入将会成功。 如果是用于其他节点,写入将失败。 如果你使用ANY,写入会成功,假设你正在和正在运行的节点通话。 我认为你也必须暗示已经启用了切换。 下面的节点会在晚些时候获取数据,直到发生这种情况之后才能读取数据,甚至不会从节点上读取数据。
在另外两个例子中,复制因素会影响最终写入的副本数量,但不会影响客户端的行为,超出了我上面所描述的范围。 QUORUM将影响客户端行为,因为您必须拥有足够数量的节点并响应写入和读取操作。 如果幸运的话,至less(节点/ 2)+ 1节点不在您需要的节点之内,那么写入和读取将会成功。 如果副本没有足够的节点,则读取和写入操作将失败。 总的来说,如果某个节点closures,假设该节点不需要存储您的副本,或者其中断仍然留下足够的副本节点,则一些QUORUM读取和写入操作可能会成功。
看看这个简单的计算器,它可以让你模拟不同的情况:
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.
该webform允许您为Apache Cassandra集群尝试不同的值,并查看对应用程序的影响。