Alo*_*lon 1 database bigdata cassandra nosql
我试图更好地理解在卡桑德拉的sstables的不变性.非常清楚当插入操作或memtable中存在数据时的更新/删除操作中会发生什么.但是,当我想要修改已经被刷新的数据时,不清楚会发生什么.
所以我理解简单的senario:我执行insert opertaion并将数据写入memtable.当记忆已满时,它会被冲到一个稳定的状态.
现在,如何进行数据修改?执行删除或更新命令时(当数据被刷新时)会发生什么?如果sstable是不可变的,那么数据将如何被删除/更新?memtable如何在删除和更新命令(由于它已被刷新而不存在于其中的数据)中起作用?记忆包含什么?
在Cassandra/Scylla,你总是追加.意味着任何操作,无论是插入/更新/删除,都会为包含新数据和新时间戳的分区创建新条目.在删除操作的情况下,新条目实际上是具有新时间戳的逻辑删除(表示先前的数据已被删除).这适用于数据是否仍在内存中(可记忆)或已刷新到磁盘 - > sstable创建.
具有不同数据和不同时间戳的相同分区的几个"版本"可以同时驻留在多个sstables(甚至在内存中)中.SStables将合并持续时间压缩,并且可以应用几种压缩策略.
当gc_grace_period
(默认值:10天,可调参数)已过期时,在下一次压缩逻辑删除将被删除时,意味着删除的数据和指示最新操作(删除)的逻辑删除将不会合并到新的sstable中.
存储库的内部实现可能在Scylla和Cassandra之间略有不同,但为了简单起见,我们假设它是相同的.
欢迎您阅读以下文档中有关该体系结构的更多信息:
归档时间: |
|
查看次数: |
254 次 |
最近记录: |