デフォルトの Cassandra キャッシュ設定で Hector を使用して CF から行を読み取っています。これは、キー キャッシュがオンになっていることを意味します。jconsole を使用してキー キャッシュ ヒットを監視しています。
しかし、単一の行を (主キーで) 100 回読み取った後でも、キャッシュ ヒットは増加しません。行は最近更新されました。
キー キャッシュが有効になっている場合、Cassandra の読み取りフローはどうなりますか。こんな感じですか?
- メモリ内の MemTable で行がチェックされます (最近の挿入/更新後に存在する可能性があります)。
- MemTable に見つからない場合は、キー キャッシュでキーがチェックされます。
- キーが見つかった場合 (キャッシュ ヒット)、1 シーク、それ以外の場合は 2 シークで行を取得します。
しかしcassandra-cli
、cassandra-jdbc
(CQL) を使用すると、異なる結果が得られます。つまり、最近行を更新した場合でも、行から読み取るたびにキー キャッシュ ヒットが発生します。たとえば、100 回読んだら、100 回ヒットします。
この不一致はなぜですか?
自分でもなんとなくわかったのですが、誰かに確認してもらいたいです。
更新すると、更新する列が MemTable にフェッチされるだけのようです。したがって、ヘクターを使用して行を更新したとき、すべての列を更新していませんでした。列だけで、読み取り操作でx
同じ列x
を読み取っていました。そのため、MemTable に既にあるため、キャッシュ ヒットはありません。
select * from cf
CQL の実行中に、他の列もフェッチする結果となったa を実行していましたy
。列y
は更新されていないため、メモリ (MemTable) に存在しなかったため、キャッシュヒットが発生したと想定しています。