ブルーム・フィルターの調整

Cassandraは、ブルーム・フィルターを使用して、SSTableが特定の行のデータを持っているかどうかを判断します。

Cassandraは、ブルーム・フィルターを使用して、SSTableが特定の行のデータを持っているかどうかを判断します。ブルーム・フィルターは、範囲スキャンには使用されませんが、インデックス・スキャンに使用されます。ブルーム・フィルターは、メモリーと正確さのバランスをとることを可能にする確率的集合です。つまり、ブルーム・フィルターの属性設定bloom_filter_fp_chanceが高いほどメモリー使用量は低くなりますが、SSTableの断片化が高くなり、ディスクI/Oが多く発生します。ブルーム・フィルターの設定範囲は、0〜1.0(無効)です。bloom_filter_fp_chanceのデフォルト値は、コンパクション・ストラテジに依存します。LeveledCompactionStrategyでは、デフォルトが0.01のSizeTieredCompactionStrategyまたはDateTieredCompactionStrategyよりも高いデフォルト値(0.1)が使用されます。メモリーの節約は非線形で、0.01〜0.1の範囲ではメモリーの約3分の1が節約されます。LCSを使用したSSTableには、STCSを使用した場合よりも比較的小さい範囲のキーが含まれているため、ブルーム・フィルターがなくてもSSTableを効率良く除外することができます。ただし、LCSのレベルが多い場合は、小さいブルーム・フィルターを追加すると役立ちます。

選択する設定は、ワークロードのタイプに応じて決めます。たとえば、特定のテーブルを大量にスキャンするAnalyticsアプリケーションを実行する場合は、テーブルのブルーム・フィルターを抑止するために高い値に設定します。

観察されたブルーム・フィルターの偽陽性率および読み取りごとに探索したSSTable数を表示するには、nodetoolユーティリティのtablestatsを使用します。

ブルーム・フィルターは、オフヒープに格納されるため、-Xmx設定(JVMのヒープが到達できる最大メモリー・サイズ)を決定する際にそれを含める必要はありません。

テーブルでブルーム・フィルターのプロパティを変更するには、CQLを使用します。例:

ALTER TABLE addamsFamily WITH bloom_filter_fp_chance = 0.1;

テーブルのbloom_filter_fp_chanceの値を更新したら、ブルーム・フィルターをいずれかの方法で再生成する必要があります。

SSTableを再生成した後は、Cassandraを再起動する必要はありません。