3

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

4

3 回答 3

3

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

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

这是我根据经验对如何使用一致性级别的看法。

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

写一个 + 全部读对于写繁重的东西很有用。我们将其用于高分示例(通常每 5 分钟读取一次以重新生成整个游戏的高分表)如果您不太关心数据(想到非关键日志),您可以使用 Write Any。

对于 Write All + Read One,我能想到的唯一用例是定期检查更新的消息或提要。聊天和消息似乎很适合这种情况,因为 Cassandra 没有订阅/推送功能。

Write & Read ALL 是一个糟糕的实现。这是一种资源浪费,因为您将获得与使用我上面提到的三种设置之一相同的一致性。

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

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

于 2013-04-15T08:21:38.940 回答
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。

问候, 卡罗

于 2013-04-12T22:28:39.367 回答
0

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

于 2016-01-12T19:00:46.793 回答