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

时间:2017-03-16 05:54:51

标签: cassandra

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

这是使用Cassandra作为数据存储区的有效方式吗?通过研究,我读到在Cassandra中更新一行并不会创建墓碑,而是会创建"阴影"当SSTable被压缩时被删除。

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

1 个答案:

答案 0 :(得分: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

相关问题