2017-02-09 6 views
1

CQL WHERE節の列スライスが読み取りパフォーマンスにどのように影響するのか疑問に思っています。 Cassandraには最適化がいくつかあります。これは、特定の列を値とともに取り出したり、行のすべての列を取り出して順番にチェックしたりする必要がありますか?例:(key1、key2)として主キーがあり、key2がクラスタリングキーです。私は、特定のkey2と一致する列、たとえばvalue2を見つけることだけを望みますか?Cassandra CQLの列スライスと読み取りパスの混乱

答えて

0

Cassandraはデータをセルとして保存します。キー+列の各値はセルです。キーの複数の値を一度保存​​すると、同じファイルにまとめられます。また、cassandraはsstablesに書き込むので、異なるファイルに同じkey-column/cellに対していくつかの値を保存することができます。そして、cassandraはすべてのファイルを読み込み、コンパイルまたは修復が発生するまで、最後に書き込まれた値を返します。削除されます。

削除/読み込み/墓石についての良い記事を:私は[この記事](https://wiki.apache.org/cassandra/ReadPathForUsers)を読んでいます http://thelastpickle.com/blog/2016/07/27/about-deletes-and-tombstones.html

+0

、それは違っ言う:私たちは、パーティションをスキャンこれは、パーティションキーに関連付けられたデータを見つけることができるSSTableにオフセットを提供します。 次に、メモリ内のMemTableからデータを読み取り、これをSSTablesのデータとマージします。データは、セルごとにマージされ、各セルのタイムスタンプが比較され、最新のタイムスタンプが選択されます。墓碑は無視されます。 –

+0

墓石について - あなたは彼らがそう思う方法でそれを無視していません。例:あなたは鍵を持っていて、それを3回挿入した後、それを削除しました。したがって、理論的には、このキーには4つの「値」があります.3つの値と墓石です。そのキーの値を要求すると、エンジンは4つの「値」をすべて調べ、最新のものを判別します。これがトゥームストーンの場合、行/値は取得されませんが、カッサンドラが読む。 – nevsv