Cassandraドキュメント

バージョン

プレリリース版のドキュメントを表示しています。

SAIインデックスの設定

Storage-Attached Indexing (SAI) のためにApache Cassandra環境を設定するには、cassandra.yamlファイルの重要なカスタマイズが必要です。

ファイルキャッシュをデフォルト値より大きくする

デフォルトでは、ファイルキャッシュのfile_cache_sizeの値は、MaxDirectMemorySize設定の50%として計算されます。このfile_cache_sizeのデフォルトでは、Cassandraが利用可能なメモリを最大限に活用できないため、パフォーマンスが最適にならない可能性があります。

ファイルキャッシュはチャンクキャッシュとも呼ばれます。

file_cache_sizeの値はcassandra.yamlで明示的に定義できます。推奨されるのは、

  1. --XX:MaxDirectMemorySizeを大きくし、OSやその他のインメモリ構造のために約15〜20%のメモリを残すことです。

  2. cassandra.yamlで、file_cache_sizeをその値の75%に明示的に設定します。

テストでは、この設定により、読み取り、書き込み、および混合読み取り/書き込みシナリオ全体でインデックス作成のパフォーマンスが向上します。

コンパクション戦略

読み取りクエリは、生成されるSSTableが少ないコンパクション戦略の方がパフォーマンスが高くなります。

SAIインデックスを含むほとんどの環境では、デフォルトのSizeTieredCompactionStrategy (STCS) を使用することをお勧めします。この戦略は、テーブルのサブプロパティmin_thresholdで設定された、ディスク上の同様のサイズのSSTableの数が一定数に達すると、マイナーコンパクションをトリガーします。マイナーコンパクションには、キースペース内のすべてのテーブルが含まれるわけではありません。詳細については、コンパクションの設定を参照してください。

時系列データの場合、代替手段はTimeWindowCompactionStrategy (TWCS) です。TWCSは、一連のタイムウィンドウを使用してSSTableをコンパクションします。タイムウィンドウ内では、TWCSはメモリからフラッシュされたすべてのSSTableをSTCSを使用してより大きなSSTableにコンパクションします。タイムウィンドウの終わりには、これらのSSTableすべてが単一のSSTableにコンパクションされます。その後、次のタイムウィンドウが開始され、プロセスが繰り返されます。タイムウィンドウの期間のみ設定が必要です。TimeWindowCompactionStrategyを参照してください。TWCSの詳細については、Time Window Compaction Strategyを参照してください。

一般的に、インデックスクエリがトークン範囲を直接またはパーティションキーの制限によって制限しない限り、LeveledCompactionStrategy (LCS) は使用しないでください。ただし、LCSを使用する場合は、次のガイドラインに従ってください。

  • このトピックで説明されているCREATE TABLEコマンドのsstable_size_in_mbオプションのデフォルトである160 MBは、トークン範囲またはパーティションキーを制限しないインデックスクエリでは、パフォーマンスが最適にならない可能性があります。

  • ハードウェアによっては、さらに高い値が適切な場合もありますが、DataStaxはsstable_size_in_mbのデフォルト値を少なくとも2倍にすることを推奨しています。

CREATE TABLE IF NOT EXISTS my_keyspace.my_table
.
.
.
   WITH compaction = {
     'class' : 'LeveledCompactionStrategy',
     'sstable_size_in_mb' : '320' };

MB値を大きくした後、SAIインデックスを持つテーブルでクエリのパフォーマンスが向上するかどうかを確認します。クエリごとのパフォーマンスの変化を観察するには、CassandraクエリメトリクスのQueryLatencySSTableIndexesHitのデータを確認してください。

SSTableが大きくなるため、より大きな値を使用するとより多くのディスクスペースが予約され、交換される予定のSSTableはコンパクション中に多くのスペースを使用します。ただし、より大きな値を使用すると、SSTableの数が減り、クエリのレイテンシーが低下します。各SAIインデックスは、より大きなインデックスによる長期的な圧縮が向上するため、最終的にはディスク上の消費スペースが少なくなります。

ワークロードが読み取りに支配されておらず、書き込み増幅が増加しているときに、大きな(sstable_max_size〜2GB)SAIインデックス付きSSTableでクエリのパフォーマンスが低下する場合は、Unified Compaction Strategy (UCS) の使用を検討してください。

SAI暗号化について

SAIインデックスでは、ディスク上のコンポーネントは単純に追加のSSTableデータです。テーブルのパーティションキー値に含まれるものを含め、機密性の高いユーザーデータを保護するために、SAIは、文字列のトライインデックスデータや数値のkdツリーデータなど、ユーザーデータを含むインデックスのすべての部分を暗号化する必要があります。設計上、SAIは、投稿メタデータやSSTableレベルのオフセット、トークンなどの非ユーザーデータを暗号化しません。