gpt4 book ai didi

database - 理解 SSTable 不变性

转载 作者:搜寻专家 更新时间:2023-10-30 21:49:13 25 4
gpt4 key购买 nike

我试图更好地理解 Cassandra 中 sstables 的不变性。当数据存在于 memtable 中时,在插入操作或更新/删除操作中会发生什么非常清楚。但是不清楚当我想修改已经被刷新的数据时会发生什么。

所以我理解了简单的 senario:我执行一个插入操作并将数据写入内存表。当 memtable 已满时,它会被刷新到 sstable。

现在,数据的修改是如何发生的?当我执行删除或更新命令时(当数据已被刷新时)会发生什么?如果 sstable 是不可变的,那么数据将如何被删除/更新? memtable 如何在删除和更新命令中工作(因为它已被清除,所以不存在于其中的数据)? memtable 将包含什么?

最佳答案

在 Cassandra/Scylla 中,你总是追加。这意味着任何操作,无论是插入/更新/删除都会为该分区创建一个包含新数据和新时间戳的新条目。在删除操作的情况下,新条目实际上将是一个带有新时间戳的墓碑(表示以前的数据已被删除)。这适用于数据是否仍在内存 (memtable) 中或已经刷新到磁盘 -> 已创建 sstable。

具有不同数据和不同时间戳的同一分区的多个“版本”可以同时驻留在多个sstables(甚至内存)中。 SStables 将合并持续时间压缩,并且可以应用多种压缩策略。

gc_grace_period(默认值:10 天,可调)过期时,在下一次压缩时,该墓碑将被删除,这意味着已删除的数据和墓碑指示最新操作(删除) , 不会合并到新的 sstable 中。

memtables 的内部实现在 Scylla 和 Cassandra 之间可能略有不同,但为了简单起见,我们假设它们是相同的。

欢迎您阅读以下文档中有关架构的更多信息:

关于database - 理解 SSTable 不变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51000833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com