Cassandra覆盖/更新行的最佳实践?

Cassandra覆盖/更新行的最佳实践?,cassandra,Cassandra,我们计划使用Cassandra 3.1作为我们的数据存储。数据模型将使用用户ID作为分区键/主键,而不使用集群键。查询模式是访问特定用户的用户ID,并使用各种数据更新该行。其目的不是简单地添加更多列,而是完全覆盖值/列,例如时间戳、版本和用户的其他各个方面。预计每天将有大约一百万个不同的用户被写入,每个用户每天可能被写入数千次 这是将Cassandra用作数据存储的有效方法吗?通过研究,我了解到更新Cassandra中的行不会创建墓碑,而是会创建“阴影”,当SSTable被压缩时,这些阴影会被移

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

这是将Cassandra用作数据存储的有效方法吗?通过研究,我了解到更新Cassandra中的行不会创建墓碑,而是会创建“阴影”,当SSTable被压缩时,这些阴影会被移除


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

Cassandra模型是一种仅附加的模式-每次更新或删除键+列对都保存为新版本,而不是就地更新-墓碑只是一个表示行已删除的版本。因此,即使在墓碑上也可以使用它:)。读取时,Cassandra将只返回此类键/值对的最新值

数据保存在sstables中,当压缩其中两个表时,在处理后,这些表中每个键值对的最新数据将被保存

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

关于写入路径:


“每天大约有一百万不同的用户被写入,每个用户每天可能被写入数千次”如果我们的一个应用程序团队来找我要求一个新的集群,并说,我的回答是,不,这不是一个好主意与Cassandra。感谢您的回复。特别是什么会让你说这不是一个好主意?我担心的是,经常更新的值(10k/天ea)会在下面创建太多过时的数据,以至于你的分区会变得太大和笨拙。当然,压缩可以回收这些数据,但是每天更新一个列值10k次实在是太多了。