在Cassandra中读取您自己的写入一致性

时间:2011-07-28 20:56:03

标签: cassandra consistency eventual-consistency

自己编写的一致性是所谓的最终一致性的重大改进:如果我更改了我的个人资料图片,我不在乎其他人是否会在一分钟后看到更改,但是如果页面重新加载后看起来很奇怪我仍然看到旧的。

这可以在Cassandra中实现,而无需在多个节点上进行完整的读取检查吗?

在读取未指定的数据时使用ConsistencyLevel.QUORUM是正常的,并且实际上正在读取n> 1个节点。但是,当客户端在写入时从同一节点读取(并且实际使用相同的连接)时,这可能是浪费的 - 在这种情况下,某些数据库总是确保返回先前写入的(my)数据,而不是一些较旧的。使用ConsistencyLevel.ONE 确保这一点并假设它会导致竞争条件。一些测试表明:http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/per-connection-quot-read-after-my-write-quot-consistency-td6018377.html

我对这种情况的假设设置是2个节点,复制因子2,读取级别1,写入级别1.这导致最终一致性,但我想要自己读写一致性读取。

使用3个节点,我认为RF = 3,RL =仲裁和WL =仲裁会导致浪费的读取请求,如果我在“我的”数据上只有 就足够了。

// seo:也称为:会话一致性,读写后一致性

2 个答案:

答案 0 :(得分:5)

好问题。

我们已经开放了http://issues.apache.org/jira/browse/CASSANDRA-876一段时间来添加它,但是没有人为此付出困难,因为

  1. CL.ONE适用于很多没有任何额外体操的工作量
  2. 无论如何读取都是如此之快,以至于执行额外的操作并不是什么大事(实际上,Read Repair,默认情况下启用,意味着所有节点都会被检查,所以CL.ONE和更高版本之间的区别真的很大更多关于可用性而不是性能)
  3. 那就是说,如果你有动力去帮忙,请在机票上询问,我很乐意为你指明正确的方向。

答案 1 :(得分:0)

我一直在关注Cassandra开发一段时间,我还没有看到像这样的功能。

那就是说,如果你只有2个复制因子为2的节点,我会质疑Cassandra是否是最好的解决方案。您将最终得到每个节点上的整个数据集,因此更传统的复制SQL设置可能更简单,测试更广泛。 Cassandra非常有前途,但它仍然只有0.8.2版本,并且在邮件列表中定期报告问题。

解决“查看我自己的更新”问题的另一种方法是将结果缓存到离客户端更近的位置,无论是在Web服务器,应用程序层还是使用类似memcached的东西。