cassandra(或scylla)如何对集群列进行排序?

s2j5cfk0  于 2021-06-15  发布在  Cassandra
关注(0)|答案(2)|浏览(493)

Cassandra(或锡拉)的好处之一是:
当一个表有多个聚类列时,数据以嵌套排序顺序存储。https://docs.datastax.com/en/dse/6.0/cql/cql/cql_using/whereclustering.html
因此,我认为以同样的排序顺序读取数据应该非常快。
如果数据的写入顺序与聚类列指定的顺序不同,那么cassandra(或scylla)实际何时对数据重新排序?
是在memtables被刷新到sstables的时候吗?
如果一个memtable已经被刷新了,我添加了一个新的记录,这个记录应该在现有sstable中的记录之前呢?
它是否会让磁盘上的数据暂时无序,并在压缩过程中重新排序?
如果是这样,它会采取什么步骤来确保读取的顺序正确?

nbewdwxp

nbewdwxp1#

数据总是在任何给定的sstable中排序。
当一个memtable被刷新到磁盘时,它将创建一个新的sstable,并在它自己内部进行排序。这是自然发生的,因为memtables按排序顺序存储数据,所以此时不需要额外的排序。排序发生在插入memtable时。
使用自然排序的读取必须从与读取相关的所有sstable中读取,将多个排序结果合并为一个排序结果。这种合并是在内存中进行的。
压缩启动后,将用一个sstable替换多个sstable,创建一个合并流,就像常规读取一样。
这种存储数据的技术称为日志结构的合并树。

yvgpqqbh

yvgpqqbh2#

数据在压缩过程中被重新排序。
基本上,任何写操作都只是一个附加操作,以达到非常快的速度。不涉及阅读或搜索。
在读取数据时,cassandra正在从活动memtable和一个或多个sstable读取数据。聚合数据并满足查询。
由于数据分发可能需要访问越来越多的sstable,压缩的作用是重新组织磁盘上的数据,因此它将消除从多个sstable读取数据的潜在开销。值得一提的是,sstables是不可变的,并且会创建新的sstables。旧的被丢弃了。
这个过程在锡拉和Cassandra都是相似的。

相关问题