Aru*_*run 2 upsert cassandra tombstone datastax
根据有关 Tombstone 的问题,为什么 upserts 不创建墓碑?根据 datastax 文档,数据如何更新?对于每个 upsert,cassandra 将删除后插入,因为插入的新时间戳会覆盖旧时间戳。旧时间戳数据必须标记为与墓碑相关的删除。
为什么我们有相互矛盾的陈述?否则我在这里遗漏了什么?
用例:在 Cassandra 中使用唯一键 (uuid) 插入数据,并且此数据中的某些列经常更新。您推荐哪种方法?
哪种方法会或不会创建墓碑?Cassandra 如何处理这两个查询?
正如 Russ 所指出的,您可能想阅读有关此主题的其他类似问题。然而,
更新插入/覆盖只是另一个单元格,具有名称、时间戳和值。
墓碑就像覆盖一样,除了它有一个额外的字段表明它已被删除,因此它不会作为有效输出返回。墓碑通常有害的原因是它们可以在错误的数据模型中积累,即使人们认为数据已经消失 - 并且跳过它们以获取实时数据实际上需要内存。
当您按照您的描述更新/更新插入时,您创建的单元格将创建 SHADOWS(过时)前一个单元格,该单元格将在压缩时被删除。先前的单元格不是墓碑,即使它不再处于活动状态/活动状态 - 只要压缩允许,它就会被压缩并完全被新的、活动的、最高时间戳值取代。
要记住的最重要的事情是:墓碑不一定通过压缩删除 - 它们至少保留(持久/重写)gc_grace_seconds,如果它们需要隐藏/覆盖sstables中的其他单元格,则可能甚至很长时间- 还紧凑。因此,墓碑会保留很长时间,但是一旦它们所在的 sstable 被压缩,阴影/覆盖的单元就会被 gc'd。