キャッシュを効率良く使用するためのヒント
キャッシュを効率良く使用するためのいくつかのヒント。
キャッシュを効率良く使用するためのヒントをいくつか以下に示します。
- 要求頻度の少ないデータまたは非常に長いパーティションを持つデータを、キャッシングが最小または存在しないテーブルに格納します。
- 1ノードあたりの負荷が比較的軽いトランザクション・ノードを多数デプロイします。
- 読み取りが多いデータは、論理的に分離して個別のテーブルに入れます。
注: 「Cassandra 2.1における行キャッシュの調整」ブログでは、組み込みキャッシングのメカニズムを使用し、効率的なデータ・モデルを設計するためのベスト・プラクティスについて説明されています。
テーブルのクエリーを実行する場合は、トレーシングをオンにして、テーブルが実際、ディスクからではなくキャッシュからデータを取得していることを確認します。初めてパーティションからデータを読み込む場合、キャッシュへの読み込みが行われていないため、トレースにはクエリの下にこの行が表示されます。
Row cache miss [ReadStage:41]
同じパーティションの後続のクエリでは、トレースで以下のような行を見つけます。
Row cache hit [ReadStage:55]
この出力は、データがキャッシュで見つかり、ディスクの読み取りが発生していないことを意味します。更新によってキャッシュが無効になります。キャッシュ内にある行とキャッシュされていない行をクエリした場合、グローバル制限で許容される数より多くの行を要求してください。そうしないと、クエリによってパーティションの開始部分が取得されず、トレースには以下のような行が表示されます。
Ignoring row cache as cached value could not satisfy query [ReadStage:89]
この出力は、不十分なキャッシュによりディスクの読み取りが発生したことを示しています。パーティションの開始部分以外で行を要求した場合に、この問題が発生する可能性が高くなります。クエリがパーティションの開始部分をスキップする原因と考えられる制約を削除してみてください。あるいは、キャッシュのオーバーフローを防ぐため、クエリに制限を設定してください。クエリのキャッシュ・ヒットを確実にするには、キャッシュ・サイズの制限を大きくするか、テーブルを再構築して頻繁にアクセスされる行をパーティションの先頭に配置してください。