Cassandra(或 Scylla)如何对聚类列进行排序?
How does Cassandra (or Scylla) sort clustering columns?
Cassandra(或 Scylla)的一个好处是:
When a table has multiple clustering columns, the data is stored in nested sort order.
https://docs.datastax.com/en/dse/6.0/cql/cql/cql_using/whereClustering.html
因此,我认为以相同的排序顺序读回数据应该非常快。
如果数据的写入顺序与集群列指定的顺序不同,Cassandra(或 Scylla)何时实际对数据重新排序?
是当 memtables 刷新到 SSTables 时吗?
如果一个 memtable 已经被刷新,我添加了一个新记录,该记录应该在现有 SSTable 中的记录之前?
它是否让数据在磁盘上暂时乱序并在压缩期间重新排序?
如果是这样,需要采取哪些步骤来确保读取顺序正确?
数据总是在任何给定的 sstable 中排序。
当一个 memtable 被刷新到磁盘时,这将创建一个新的 sstable,它在自身内部排序。这是自然发生的,因为 memtables 按排序顺序存储数据,因此此时不需要额外的排序。排序发生在插入内存表时。
使用自然排序的读取将必须从与读取相关的所有 sstables 中读取,将多个排序结果合并为一个排序结果。这种合并在内存中即时发生。
压缩启动时,会将多个 sstable 替换为一个,创建一个合并流,就像常规读取一样。
这种存储数据的技术被称为 log-structured merge tree。
数据在压缩过程中重新排序。
基本上,任何写入都只是追加,以便非常快。不涉及读取或查找。
读取数据时,Cassandra 正在从活动内存表和一个或多个 SSTable 中读取。数据汇总,满足查询。
由于数据分发可能需要访问越来越多的 SSTable,压缩的作用是重组磁盘上的数据,从而消除从多个 SSTable 读取数据的潜在开销。值得一提的是,SSTables 是不可变的,并且会创建新的 SSTables。旧的被丢弃。
Scylla 和 Cassandra 中的过程相似。
Cassandra(或 Scylla)的一个好处是:
When a table has multiple clustering columns, the data is stored in nested sort order. https://docs.datastax.com/en/dse/6.0/cql/cql/cql_using/whereClustering.html
因此,我认为以相同的排序顺序读回数据应该非常快。
如果数据的写入顺序与集群列指定的顺序不同,Cassandra(或 Scylla)何时实际对数据重新排序?
是当 memtables 刷新到 SSTables 时吗?
如果一个 memtable 已经被刷新,我添加了一个新记录,该记录应该在现有 SSTable 中的记录之前?
它是否让数据在磁盘上暂时乱序并在压缩期间重新排序?
如果是这样,需要采取哪些步骤来确保读取顺序正确?
数据总是在任何给定的 sstable 中排序。
当一个 memtable 被刷新到磁盘时,这将创建一个新的 sstable,它在自身内部排序。这是自然发生的,因为 memtables 按排序顺序存储数据,因此此时不需要额外的排序。排序发生在插入内存表时。
使用自然排序的读取将必须从与读取相关的所有 sstables 中读取,将多个排序结果合并为一个排序结果。这种合并在内存中即时发生。
压缩启动时,会将多个 sstable 替换为一个,创建一个合并流,就像常规读取一样。
这种存储数据的技术被称为 log-structured merge tree。
数据在压缩过程中重新排序。
基本上,任何写入都只是追加,以便非常快。不涉及读取或查找。
读取数据时,Cassandra 正在从活动内存表和一个或多个 SSTable 中读取。数据汇总,满足查询。
由于数据分发可能需要访问越来越多的 SSTable,压缩的作用是重组磁盘上的数据,从而消除从多个 SSTable 读取数据的潜在开销。值得一提的是,SSTables 是不可变的,并且会创建新的 SSTables。旧的被丢弃。
Scylla 和 Cassandra 中的过程相似。