11

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

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

在读取未指定的数据时使用ConsistencyLevel.QUORUM很好,并且实际上正在读取 n>1 个节点。但是,当客户端在写入时从同一个节点读取(并且实际上使用相同的连接),这可能会很浪费 - 在这种情况下,某些数据库将始终确保返回以前写入的(我的)数据,而不是返回一些旧的数据。使用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=quorum 和 WL=quorum 会导致浪费的读取请求。

// seo:也称为:会话一致性、read-after-my-write 一致性

4

2 回答 2

5

好问题。

我们已经打开了http://issues.apache.org/jira/browse/CASSANDRA-876一段时间来添加它,但没有人打扰完成它,因为

  1. CL.ONE 适用于很多工作量,无需任何额外的体操
  2. 无论如何,读取是如此之快,以至于做额外的事情并不是什么大问题(事实上,默认情况下启用的读取修复意味着无论如何都会检查所有节点,因此 CL.ONE 和更高版本之间的区别实际上更多的是关于可用性比性能)

也就是说,如果您愿意提供帮助,请在票上询问,我很乐意为您指明正确的方向。

于 2011-07-29T05:35:32.427 回答
0

我一直在关注 Cassandra 的开发,但我还没有看到提到过这样的功能。

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

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

于 2011-07-28T21:34:05.083 回答