4

Cassandra (または Scylla) の利点の 1 つは、次のとおりです。

テーブルに複数のクラスタリング列がある場合、データはネストされた並べ替え順序で格納されます。 https://docs.datastax.com/en/dse/6.0/cql/cql/cql_using/whereClustering.html

このため、同じソート順でデータを読み戻すのは非常に高速であると思います。

クラスタリング列が指定する順序とは異なる順序でデータが書き込まれた場合、Cassandra (または Scylla) が実際にデータを並べ替えるのはいつですか?

memtables が SSTables にフラッシュされるのはいつですか?

memtable が既にフラッシュされており、既存の SSTable のレコードの前にあるはずの新しいレコードを追加した場合はどうなりますか?

しばらくの間、ディスク上のデータを順不同に保ち、圧縮中に再順序付けしますか?

もしそうなら、読み取りが正しい順序であることを確認するためにどのような手順が必要ですか?

4

2 に答える 2

7

データは常に任意の sstable でソートされます。

memtable がディスクにフラッシュされると、新しい sstable が作成され、それ自体でソートされます。memtable はデータをソートされた順序で格納するため、これは自然に発生するため、その時点で追加のソートは必要ありません。memtable への挿入時にソートが行われます。

自然順序付けを使用する読み取りは、読み取りに関連するすべての sstables から読み取る必要があり、複数の並べ替えられた結果を 1 つの並べ替えられた結果にマージします。このマージは、オンザフライでメモリ内で行われます。

圧縮が開始されると、複数の sstable が 1 つに置き換えられ、通常の読み取りと同じようにマージされたストリームが作成されます。

データを格納するこの手法は、ログ構造のマージ ツリーとして知られています。

于 2018-10-29T08:35:42.487 に答える