データはどのように書き込まれるか
Cassandraはどのようにデータを書き込み格納するかを理解します。
- コミット・ログへのデータのログ記録
- memtableへのデータの書き込み
- memtableからのデータのフラッシュ
- ディスク上のSSTableへのデータの格納
書き込みのログ記録とmemtableへの保存
書き込みが発生すると、Cassandraはmemtableと呼ばれるメモリー構造にデータを格納し、構成可能な永続性を実現します。さらに、書き込みをディスクのコミット・ログに追記します。このコミット・ログは、Cassandraノードへのすべての書き込みを受け取ります。そしてこれらの永続性のある書き込みは、ノードで電源喪失があっても恒久的に存続します。memtableは、Cassandraがキーで検索するデータ・パーティションのライトバック・キャッシュです。memtableは構成可能な制限に達するまで書き込みを格納し、その後でフラッシュされます。
memtableからのデータのフラッシュ
Cassandraはデータをフラッシュするために、トークンを基準にしてmemtableをソートし、ディスクにデータをシーケンシャルに書き込みます。トークンをディスク上の場所にマップするパーティション・インデックスがディスク上に作成されます。memtableの内容が構成可能なしきい値を超えると、memtableは、ディスクにフラッシュされるキューに置かれます。このキューは、cassandra.yamlファイルのmemtable_heap_space_in_mbまたはmemtable_offheap_space_in_mbの設定で構成できます。フラッシュ対象データがキューのサイズを超えると、Cassandraは次のフラッシュが成功するまで書き込みをブロックします。nodetool flushを使用して、手動でテーブルをフラッシュすることができます。コミット・ログのリプレイ時間を短縮するために、ノードを再起動する前にmemtableをフラッシュすることがベスト・プラクティスです。コミット・ログのリプレイは、中断された操作に際して、失われた書き込みを復元させるためのコミット・ログの読み取りプロセスです。
コミット・ログのデータは、memtableの該当するデータがディスク上のSSTableにフラッシュされた後でパージされます。
ディスク上のSSTableへのデータの格納
memtableとSSTableは、テーブルごとに維持されます。SSTableは不変であり、memtableがフラッシュされた後に再度書き込まれることはありません。この結果、パーティションは通常、複数のSSTableファイルにわたって格納されます。読み取り操作を支援するために他の多くのSSTable構造が存在します。
Cassandraでは、SSTableごとに以下の構造が作成されます。
- パーティション・インデックス
パーティション・キーのリストおよびディスクに書き込まれたデータ・ファイルの行の開始位置
- パーティション・サマリー
メモリーに格納されたパーティション・インデックスのサンプル。
- ブルーム・フィルター
ディスク上のSSTableにアクセスする前にmemtableに行データが存在するかどうかを確認する、メモリーに格納された構造
SSTableとはディスクに格納されたファイルです。SSTableファイルの命名規則は、ファイル・パスを短縮するためにCassandra 2.2以降では変更されています。データ・ファイルはデータ・ディレクトリーに格納されますが、インストール時に場所が変わります。キー・スペースごとに、データ・ディレクトリー内のディレクトリーに各テーブルが格納されます。たとえば、/data/data/ks1/cf1-5be396077b811e3a3ab9dc4b9ac088d/la-1-big-Data.dbはデータ・ファイルを表します。ks1はキー・スペース名を表し、ストリーミングまたは一括読み込みデータを区別します。この例の16進数文字列、5be396077b811e3a3ab9dc4b9ac088dは、テーブル名に追加され、一意のテーブルIDを表します。
複数のファイルが書き込まれ、データ、パーティション・サマリー、統計、および他の情報を格納します。
Cassandraではテーブルごとにサブディレクトリーが作成されるため、選択した物理ドライブやデータ・ボリュームに対してテーブルのsymlinkを作成することができます。これにより、非常にアクティブなテーブルをSSDのような高速メディアに移動してパフォーマンスを向上させたり、接続されているすべてのストレージ・デバイスでテーブルを分配して、ストレージ層のI/Oバランスを改善したりすることが可能になります。