[英]Read-your-own-writes consistency in Cassandra
从所谓的最终一致性来看,你自己写的一致性是一个很大的改进:如果我改变了我的个人资料图片,我不在乎别人是否会在一分钟之后看到这个变化,但是如果在页面重新加载后我仍然看到它看起来很奇怪旧的。
这可以在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:也称为:会话一致性,read-after-my-write一致性
好问题。
我们已经开启了http://issues.apache.org/jira/browse/CASSANDRA-876一段时间来添加这个,但是没有人为此付出困难,因为
也就是说,如果你有动力去帮忙,请在机票上询问,我很乐意指出你正确的方向。
我一直在跟随Cassandra开发一段时间,我还没有看到像这样的功能。
也就是说,如果你只有2个复制因子为2的节点,我会质疑Cassandra是否是最佳解决方案。 您将最终得到每个节点上的整个数据集,因此更传统的复制SQL设置可能更简单,测试更广泛。 Cassandra很有前途,但它仍然只有0.8.2版本,并且在邮件列表上定期报告问题。
解决“查看我自己的更新”问题的另一种方法是将结果缓存到离客户端更近的位置,无论是在Web服务器,应用程序层还是使用memcached之类的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.