我有一张桌子,每秒大约有1000页的浏览量。我应该使用什么读写ConsistencyLevel?我正在使用Cassandra Thrift客户端。
答案 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。我想某种合并用于解决计数器列的冲突,而不是通常的最后写入胜利。这可能是为什么不允许设置值的原因。