什么ConsistencyLevel与Cassandra计数器表一起使用?

时间:2013-04-12 21:13:37

标签: cassandra

我有一张桌子,每秒大约有1000页的浏览量。我应该使用什么读写ConsistencyLevel?我正在使用Cassandra Thrift客户端。

3 个答案:

答案 0 :(得分:3)

卡罗或多或少有正确的想法。但是你必须与你的用例保持平衡。

我在游戏行业工作,我们使用cassandra作为玩家数据。它受到读取 - 修改 - 写入模式的严格约束,而这种模式并不是cassandra的强项。但是我们也有一些写重的功能(每天几次读取数千次写入)。

根据经验,这是我对如何使用一致性水平的看法。

QUORUM的写入+读取意味着在返回两个操作之前,它将等待群集中的大多数节点确认操作。这是我在Read和Writes大致处于相同频率时使用的解决方案。 (玩家数据blob)

Write One + Read All对于写得很重的东西很有用。我们使用这个作为例子的高分(写作经常每5分钟读一次,以重新生成整个游戏的高分表)  如果您不关心那些数据(非关键日志会想到),您可以使用Write Any。

我可以为Write All + Read One提供的唯一用例是使用定期检查更新的消息或提要。聊天和消息传递看起来非常适合,因为Cassandra没有订阅/推送功能。

写作&读取ALL是一个糟糕的实现。它是一种资源浪费,因为你将获得与我上面提到的三种设置之一相同的一致性。

关于写任何与写一个的最后说明:任何只确认群集中的任何东西都收到了突变,但是ONE确认它至少被一个节点应用了。 ANY不安全,因为它可以无错误地返回,即使负责该突变的所有节点都已关闭,或者任何其他可能导致接收后突变失败的情况。它也稍微快一些(我只将其用作非关键日志的异步转储),这是它唯一的优势,但不要相信100%的响应。

关于cassandra研究这个主题的一个很好的参考是http://www.datastax.com/docs/1.2/dml/data_consistency

答案 1 :(得分:2)

如果您希望在任何阅读时始终保持一致,则规则为

(写一致性级别+读一致性级别)>复制因子。

所以你可以

Write All + Read All (worst solution)
Write One + Read All (second-worst solution)
Write All + Read One (probably faster solution)
Write Quorum + Read Quorum (imho, best solution)

我想要记住,如果在r / w操作期间RF节点关闭,操作将失败,因此我将避免CL ALL。

问候,卡罗

答案 2 :(得分:0)

根据他们的文档(https://docs.datastax.com/en/cql/3.0/cql/ddl/ddl_counters_c.html),建议使用一致性级别ONE。我想某种合并用于解决计数器列的冲突,而不是通常的最后写入胜利。这可能是为什么不允许设置值的原因。