Cassandra(或Scylla)如何对聚类列进行排序?

Dre*_*eur 4 cassandra scylla

Cassandra(或Scylla)的一个好处是:

当表具有多个群集列时,数据将以嵌套排序顺序存储. https://docs.datastax.com/en/dse/6.0/cql/cql/cql_using/whereClustering.html

因此,我认为以相同的排序顺序读回数据应该非常快.

如果数据的编写顺序与聚类列指定的顺序不同,那么Cassandra(或Scylla)何时实际重新排序数据?

是什么时候memtables被刷新到SSTables?

如果已经刷新了memtable,并且我在现有SSTable中的记录之前添加了一条新记录,该怎么办?

是否会将数据暂时保留在磁盘上并在压缩过程中重新排序?

如果是这样,需要采取哪些步骤来确保读取的顺序正确?

Tom*_*mek 7

数据总是在任何给定的sstable中排序.

当memtable被刷新到磁盘时,将创建一个新的sstable,它在自身内进行排序.这很自然地发生,因为memtables按排序顺序存储数据,因此此时不需要额外的排序.插入到记忆中时会进行排序.

使用自然排序的读取将必须读取与读取相关的所有sstables,将多个排序结果合并为一个排序结果.这种合并在内存中即时发生.

压缩,当它开始时,将用一个替换多个sstables,创建一个合并的流,就像常规读取一样.

这种存储数据的技术称为日志结构合并树.