SSTable Attached Secondary Index(SASI)を使用したインデックス作成

SSTable Attached Secondary Index(SASI)とは何かについて説明します。

注: DSEにおけるSASIインデックスの使用は試験段階です。DataStaxでは、実稼働環境ではSASIインデックスをサポートしていません。
SASIは必要とするリソースが大幅に少なく、メモリー、ディスク、CPUの使用量を抑えることができます。SELECTで説明したように、LIKE = "foo%"LIKE = "%foo%"のSQL実装と同様に、文字列に対してPREFIXとCONTAINSを使用したクエリーが可能です。時系列データなど、大きく密度の高い数値範囲に対するクエリーのパフォーマンスを向上させるためSPARSEインデックス作成もサポートしています。

memtableからディスクにデータがフラッシュされるとき、SASIは1回だけ書き込める不変の順序指定データモデルを利用してインデックスを作成します。SSTableの書き込みが完了する前にシーケンシャル書き込みとしてSSTableがディスクに書き込まれフラッシュされるため、SASIインデックス・データ構造がメモリーに構築されます。カラムのインデックスが作成されるたびに1つのインデックス・ファイルが書き込まれます。

SASIはCQLで既にサポートされているすべてのクエリーをサポートするほか、PREFIXCONTAINS、およびSPARSEを使用したLIKE演算子もサポートしています。ALLOW FILTERINGを使用する場合、SASIはANDを使用した複数の述語を持つクエリーもサポートしています。SASIでは、ALLOW FILTERINGを使用する場合でもフィルター処理が行われないため、フィルターを使用することによるパフォーマンスへの影響はありません。

SASIはインデックスのデータ構造として効率が良い、メモリー・マップB+ツリーを使用して実装されます。B+ ツリーを使用すると、範囲クエリーをすばやく実行できます。SASIでは、SSTableごとにインデックスが生成されます。この設計に基づく主な機能をいくつか示します。
  • SASIではデータ・ファイルのオフセットを参照できるため、ブルーム・フィルターとパーティション・インデックスをスキップして、データの保管場所に直接アクセスすることができます。
  • SSTableをコンパクションすると、新しいインデックスが自動的に生成されます。

SASIではコレクションはサポートされていません。コレクションには通常のセカンダリ・インデックスを作成することができます。