Database 理解SSP的不可变性

Database 理解SSP的不可变性,database,cassandra,nosql,bigdata,Database,Cassandra,Nosql,Bigdata,我试图更好地理解Cassandra中sstables的不变性。当数据存在于memtable中时,插入操作或更新/删除操作都会发生什么,这一点非常清楚。但不清楚当我想要修改已经被清除的数据时会发生什么 因此,我理解了简单的senario:我执行一个insert操作,然后将数据写入memtable。当memtable已满时,它将被刷新到sstable 现在,如何修改数据?当我执行delete或update命令(当数据被清除时)时会发生什么?如果sstable是不可变的,那么如何删除/更新数据?mem

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

因此,我理解了简单的senario:我执行一个insert操作,然后将数据写入memtable。当memtable已满时,它将被刷新到sstable


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

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

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

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

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

欢迎您阅读以下文档中有关该体系结构的更多信息:


在卡桑德拉/锡拉中,你总是附加。这意味着任何操作,无论是insert/update/delete,都将为该分区创建一个包含新数据和新时间戳的新条目。在执行删除操作的情况下,新条目实际上是带有新时间戳的墓碑(表示先前的数据已被删除)。这适用于数据是否仍在内存中(memtable)或已刷新到磁盘->创建的sstable

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

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

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

欢迎您阅读以下文档中有关该体系结构的更多信息:

这里描述了所有这些:这里描述了所有这些: