首页 文章

Cassandra最佳做法是覆盖/更新一行?

提问于
浏览
1

我们计划使用Cassandra 3.1作为我们的数据存储区 . 数据模型将使用user_uuid作为分区键/主键,没有群集键 . 查询模式是访问特定用户的user_uuid并使用各种数据更新该行 . 目的不是简单地添加更多列,而是完全覆盖值/列,例如 . 时间戳,版本和用户的其他各个方面 . 期望每天写入大约一百万个不同的用户,并且每个用户每天可以写入数千次 .

这是使用Cassandra作为数据存储区的有效方法吗?从研究开始,我读到在Cassandra中更新一行不会创建墓碑,而是会在SSTable被压缩时创建“阴影” .

因此,如果它不创建墓碑,那么这是一种安全有效的方式来存储特定用户的数据吗?

1 回答

  • 2

    Cassandra模型是一种仅附加 - 关键列对的每次更新或删除都保存为新版本,并且不会更新到位 - 逻辑删除只是一个表示该行被删除的版本 . 因此即使使用墓碑也会保存使用它:) . 在阅读时,Cassandra将仅返回此类键/值对的最新值 .

    数据保存在sstables中,当其中2个压缩时,这些表中每个键值对的最新数据将在该过程后保存 .

    Cassandra确实满足了您的负载需求,对于更新繁重的工作负载,我建议使用水平压缩策略 - 您可以在此处阅读:

    http://www.datastax.com/dev/blog/when-to-use-leveled-compaction

    关于写路径:

    https://docs.datastax.com/en/cassandra/2.1/cassandra/dml/dml_write_path_c.html

相关问题