テーブルのプロパティ

CQLテーブル・プロパティとその構文のリスト。

CQLは、Cassandraのテーブル・プロパティ(commentやcompactionオプションなど。以下の表を参照)をサポートしています。

CREATE TABLEのようなCQLコマンドでは、プロパティを名前と値の組またはコレクション・マップ形式のいずれかでフォーマットします。名前と値の組プロパティ構文は、以下のとおりです。

name = value AND name = value

compactionおよびcompressionプロパティで使用されるコレクション・マップ形式は以下のとおりです。

{ name :value, name :value, name :value ... }

文字列プロパティは単一引用符で囲みます。

例として、CREATE TABLEを参照してください。

表 1. CQLプロパティ
CQLプロパティ デフォルト 説明
bloom_filter_fp_chance SizeTieredCompactionStrategyおよびDateTieredCompactionStrategyの場合0.01LeveledCompactionStrategyの場合0.1 SSTableブルーム・フィルターの望ましい偽陽性確率。以下の「ブルーム・フィルター」を参照してください。
キャッシング Cassandra 2.1:

keysの場合ALL

rows_per_partitionの場合NONE

Cassandra 2.0.x:keys_only

キャッシュ・メモリーの使用を手動調整なしに最適化します。以下の「キャッシング」を参照してください。
comment なし より認識しやすい、テーブルを説明するコメント。以下の「コメント」を参照してください。
compaction SizeTieredCompactionStrategy テーブルのコンパクション・ストラテジを設定します。以下の「コンパクション」を参照してください。
圧縮 LZ4Compressor 使用する圧縮アルゴリズム。有効な値は、LZ4CompressorSnappyCompressor、およびDeflateCompressorです。以下の「圧縮」を参照してください。
dclocal_read_repair_chance 0.1(Cassandra 2.1、Cassandra 2.0.9以降)0.0 (Cassandra 2.0.8以前) 現在のデータ・センターですべてのレプリカを対象にリード・リペアが呼び出される確率を指定します。
default_time_to_live 0 テーブルのデフォルトの有効期限(秒単位)。TTLの制御がないときに、MapReduceシナリオで使用されます。
gc_grace_seconds 864000 [10日] トゥームストーン(削除マーカー)のガーベージ・コレクションを実行するまでの待ち時間を指定します。デフォルト値は、削除前に整合性が満たされるように十分な時間が設定されています。多くの展開でこの間隔は短縮でき、また、シングル・ノード・クラスターでは安全に0に設定できます。
min_index_interval、max_index_interval(Cassandra 2.1.x)またはindex_interval(Cassandra 2.0.x) min_index_interval 128およびmax_index_interval 2048、またはindex_interval 128 パーティション・インデックスのエントリーのサンプリングを制御するため、これらのプロパティを変更してパーティション・サマリーのサンプル頻度を設定します。以下の「min_index_intervalおよびmax_index_interval 」を参照してください。
memtable_flush_period_in_ms 0 指定した時間(ミリ秒単位)の経過後、memtableのフラッシュを強制的に実行します。
populate_io_cache_on_flush (Cassandra 2.0.xのみ) false 新しくフラッシュされた、またはコンパクトされたSSTableをOSのページ・キャッシュに追加します。この結果、空き領域を作るために他のキャッシュされているデータの領域が明け渡される場合があります。テーブルの全データをメモリーに収める必要がある場合に有効にします。cassandra.yamlファイルのグローバルなcompaction_preheat_key_cacheオプションを設定することもできます。
read_repair_chance 0.0(Cassandra 2.1、Cassandra 2.0.9以降)0.1 (Cassandra 2.0.8以前) クラスターの読み取り時にリード・リペアを呼び出す基準を指定します。値は01とする必要があります。
replicate_on_write(Cassandra 2.0.xのみ) true Cassandra 2.1で削除されました。カウンター・テーブルのみに適用します。trueに設定すると、クライアントに指定された書き込み要求の整合性レベルにかかわらず、影響を受けるすべてのレプリカへの書き込みが複製されます。カウンター・テーブルの場合、必ずtrueに設定してください。
speculative_retry 99パーセンタイル(Cassandra 2.0.2以降) read_repair_chanceが1.0ではない場合に通常の読み取りタイムアウトをオーバーライドして、別の読み取り要求を送信します。以下の「推測的再試行」を参照してください。

ブルーム・フィルター

ブルーム・フィルターのプロパティは、SSTableブルーム・フィルターの望ましい偽陽性確率です。データが要求されると、ディスクI/Oが実行される前に、ブルーム・フィルターによって行が存在するかどうかがチェックされます。ブルーム・フィルターのプロパティ値は0〜1.0です。最小値と最大値の効果は以下のとおりです。

0 変更のない、実質的に最大限のブルーム・フィルターを有効にします。

1.0 ブルーム・フィルターを無効にします。

推奨設定値は0.1です。値が高いほど効果が小さくなります。

キャッシング

キャッシュ・メモリーの使用を手動調整なしに最適化します。テーブルを作ったり変更したりするときに、テーブル・プロパティを設定してキャッシングを構成します。Cassandraはキャッシュされたデータにサイズとアクセス頻度で重みを付けます。キャッシング・テーブル・プロパティを設定してから、cassandra.yamlファイルのグローバル・キャッシング・プロパティを設定します。グローバル・キャッシング・プロパティの詳細については、Cassandra 3.0のドキュメントを参照してください。

Cassandra 2.1以降

キャッシング・プロパティの値のプロパティ・マップを作成することによってキャッシュを設定します。オプションは以下のとおりです。

  • keys:ALLまたはNONE
  • rows_per_partition:CQL行の数、NONE、またはALL
例:
CREATE TABLE DogTypes ( block_id uuid, species text, alias text, population varint, PRIMARY KEY (block_id) ) WITH caching = { 'keys' :'NONE', 'rows_per_partition' :'120' };

Cassandra 2.0

以下のキャッシング・プロパティ・オプションのいずれかを使用してキャッシュを設定します。

  • all
  • keys_only
  • rows_only
  • none
オプションを使用してキーまたは行のキャッシュを指定したり、キーと行のキャッシュの両方を指定したりできます。例:
// Cassandra 2.0.x only CREATE TABLE DogTypes ( block_id uuid, species text, alias text, population varint, PRIMARY KEY (block_id) ) WITH caching = 'keys_only';
重要: Cassandra 2.0.xでは、注意して行キャッシングを使用してください。

コメント

コメントは、アプリケーション・コードのCQLステートメントに注釈を付けるために使用できます。1行のコメントはダブル・ダッシュ(--)またはダブル・スラッシュ(//)で始まり、行の終わりまで続きます。複数行のコメントは/*と*/の記号の間に挟みます。

compaction

コンパクション・プロパティは使用するコンパクション・ストラテジ・クラスを定義します。データと環境に最も適したコンパクション・ストラテジを選択します。
注: 詳細なガイダンスについては、「When to Use Leveled Compaction」、「Leveled Compaction in Apache Cassandra」のブログを参照してください。
  • SizeTieredCompactionStrategy(STCS):デフォルトのコンパクション・ストラテジ。このストラテジは、ディスク上に、min_thresholdテーブル・サブプロパティで構成されているサイズに似たサイズのSSTableがいくつかあるときに、マイナー・コンパクションを発動します。マイナー・コンパクションでは、キースペースのすべてのテーブルが関与するわけではありません。「STCSコンパクション・サブプロパティ」も参照してください。
  • DateTieredCompactionStrategy(DTCS):Cassandra 2.0.11および2.1.1以降で使用できます。このストラテジは時系列データの場合に特に役立ちます。DateTieredCompactionStrategyは、特定の期間内に書き込まれたデータを同じSSTableに格納します。たとえば、Cassandraは過去1時間のデータを1つのSSTable時間枠に格納し、次の4時間のデータを別の時間枠に格納できます。これらの時間枠でSSTableのmin_threshold(デフォルトでは4)に達すると、コンパクションがトリガーされます。時系列ワークロードに対する最も一般的なクエリーでは、データの最後の時刻/日/月が取得されます。CassandraではSSTableを制限し、関連データを含むSSTableのみが返されるようにすることができます。また、TTLを使用して期限切れとなるように設定されているデータを、だいたい同じ時刻に期限切れとなるようにスケジュールされている他のデータとともにSSTableに格納できます。その後、コンパクションを行わずにそのSSTableを削除できます。「DTCSコンパクション・サブプロパティ」も参照してください。
  • LeveledCompactionStrategy(LCS):レベル化コンパクション・ストラテジでは、いくつかのレベルにグループ分けされる、固定の、比較的小さなサイズ(デフォルトでは160 MB)のSSTableが作成されます。各レベル内で、SSTableがオーバーラップすることはありません。各レベル(L0、L1、L2など)は、1つ下のレベルに比べると10倍大きくなっています。SSTableは、継続的に、次第により大きなレベルへとコンパクションされていくため、レベルが低い場合よりもレベルが高い方が、ディスクI/Oが均等化され予測しやすくなります。レベルごとに、行キーはオーバーラップしないSSTableにマージされます。Cassandraが、各レベルのどのSSTableで行キー・データの有無を調べるかを特定できるため、読み取りのパフォーマンスが向上します。このコンパクション・ストラテジは、Googleのleveldb実装をモデルにしています。「LCSコンパクション・サブプロパティ」も参照してください。

書き込みが多いワークロードにコンパクションが追いつかない場合、レベル化コンパクション・ストラテジを向上するハイブリッド(レベル化およびサイズ階層化)コンパクションにより、読み取り操作のパフォーマンス・オーバーヘッドが低減します。LCSを使用している場合、Cassandraがワークロードに追いつかないと、Cassandraが追いつくまでコンパクション・ストラテジがSTCSに切り替わります。このため、切り替えが発生したときに使用するテーブルのmax_thresholdサブプロパティを設定するのがベスト・プラクティスです。

カスタム・ストラテジを指定することができます。文字列定数として完全なクラス名を使用します。

圧縮

圧縮を設定するには、テーブルの作成や変更の際に、LZ4CompressorSnappyCompressor、またはDeflateCompressorプロパティを選択して使用します。圧縮を無効にするには、空の文字列('')を使用します。サブプロパティの使い方の例を参照してください。適切な圧縮の選択は、要件として読み取りパフォーマンスよりも領域の節約が重要であるかどうかにより異なります。解凍速度が最も速いのはLZ4で、次にSnappy、Deflateの順になります。圧縮効果は解凍速度に反比例します。DeflateまたはSnappyによる高い圧縮率は、一般用途のワークロードでのパフォーマンス低下と引き換えにするほどではありませんが、アーカイブ用データでは検討に値する場合があります。また、開発者は、org.apache.cassandra.io.compress.ICompressorインターフェイスを使用してカスタム圧縮クラスを実装することもできます。完全なクラス名を単一引用符で囲んで指定します。また、圧縮サブプロパティを使用します。

min_index_intervalおよびmax_index_interval

index_interval(Cassandra 2.0.x)プロパティまたはmin_index_intervalおよびmax_index_interval(Cassandra 2.1)プロパティは、プライマリ行インデックスのエントリーのサンプリングを制御し、インデックス間隔を変えることでパーティション・サマリーのサンプリング頻度を設定します。インデックス間隔を変えると、SSTableは新しい情報を使ってディスクに書き込まれます。間隔は、サンプルを取得するたびにスキップするインデックス・エントリーの数を示します。デフォルトで、Cassandraは128の行キーごとに1つの行キーをサンプリングします。間隔が大きくなるほどサンプリングは少なくなり、有効性が低くなります。サンプリングが多いほど、インデックスの有効性は高くなりますが、メモリー使用量が大きくなります。Cassandra 2.0.xでは、一般的に、メモリー使用量とパフォーマンスの最良のトレード・オフは、大きなテーブル・キー・キャッシュと組み合わせた場合に128〜512の値になります。しかし、行が小さい場合(1 OSページに多数)、サンプル・サイズを大きくした方がよいでしょう。こうすると、多くの場合パフォーマンスを損なわずにメモリー使用量が小さくなります。大きな行では、サンプル・サイズを小さくすると、読み取りパフォーマンスが向上する場合があります。

Cassandra 2.1では、index_intervalの名前がmin_index_intervalおよびmax_index_intervalに置き換えられています。max_index_intervalは、デフォルトで2048です。デフォルト値に達するのは、SSTableの読み取り頻度が低く、インデックス・サマリー・メモリ・プールがいっぱいの場合だけです。以前のリリースからアップグレードすると、Cassandraではmin_index_intervalとして古いindex_interval値が使用されます。

推測的再試行

read_repair_chanceが1.0ではない場合に通常の読み取りタイムアウトをオーバーライドして、読み取り要求をもう1回送信させるには、以下の値のいずれかを選び、プロパティを使用してテーブルを作成または変更します。
  • ALWAYS:すべてのレプリカ読み取りを再試行します。
  • Xpercentile:スループットおよびレイテンシーへの影響に基づいて読み取りを再試行します。
  • Yms:指定されたミリ秒後に、読み取りを再試行します。
  • NONE:読み取りを再試行しません。
推測的再試行プロパティを使用すると、高速読み取り保護をCassandra 2.0.2以降で設定できます。数ミリ秒が経過してから、または一般的な読み取りレイテンシーのパーセンタイルに達してから要求を再試行するには、このプロパティを使用します。これはテーブルごとに追跡されます。例:
ALTER TABLE users WITH speculative_retry = '10ms';
または:
ALTER TABLE users WITH speculative_retry = '99percentile';