要求很简单:我们必须创建一个只有24小时数据的表。 我们有两个选择
我对这两件事情有一般的了解,但内部有哪些会对墓碑有所帮助?或两者都会产生相同数量的墓碑?哪一个会更好,为什么任何参考链接将被赞赏。
答案 0 :(得分:5)
如果某个表上有default_time_to_live
,则会立即删除超过此时间限制的行而不会写入逻辑删除。这不会影响在其上设置显式TTL的行/列。这些将被墓碑化。
如果您沿着TTL路线走下去,那么您应该考虑将表格上的gc_grace_seconds
属性设置为小于默认值(10天)。特别是如果您正在观看24小时TTL。
参考文献:
How data is deleted< - 良好的背景
CREATE TABLE properties< - 表属性引用
About Deletes and Tombstones in Cassandra< - 你想知道的关于删除和墓碑的一切
答案 1 :(得分:0)
如果您使用Cassandra 3.0,您还可以定义物化视图,查看详细信息:https://docs.datastax.com/en/cql/3.3/cql/cql_using/useCreateMV.html
使用TTL并不是那么有效,因为您将生成大量的逻辑删除,这取决于可能影响您的读取性能的数据量。
此外,我认为您关于TTL的问题在这里得到解答:
答案 2 :(得分:0)
如果您使用Go,那么GocqlX可以使用基于表模型的RewriteRows函数解决此问题。
https://github.com/scylladb/gocqlx/commit/13ef8ceaf1c1661ec51459347e6b2aea6e59037c
示例:
if err := session.ExecStmt("ALTER TABLE XXXXX WITH default_time_to_live = 0"); err != nil {
return err
}
if err := table.RewriteRows(session, myGocqlXTableModelForXXXXX); err != nil {
return err
}
对于大表,您应该使用efficient full table scan加此技术。