Cassandra データ処理

2017/12/11

Cassandra データ処理

Cassandraのデータ処理について記述する。

Apache Cassandra document
Cassandra data structure architecture

読み込み処理

読み込み処理をするとき、複数のパターンで読み込みを行う。
以下にRead処理フローを記述する。

  1. MemTableを読み込む。
    • Rowキャッシュが有効であれば、MemTableよりもRowキャッシュを参照する。
  2. ブルームフィルターを確認する。
    • パーティションキーキャッシュが有効であれば、パーティションキーキャッシュを参照する。
    • パーティションキーキャッシュにデータがあれば、OffSetMapを行う。
  3. パーティションIndexを確認する。
  4. ディスクからデータを参照する。
  5. SSTableからデータを参照する。



Rowキャッシュ

Rowキャッシュは、SSTableのデータをメモリーにコピーしておくことができる。
Cassandraは、オフヒープメモリに格納するJVMガベージコレクションである。
Case of row cache enable, stored partition data on SSTable copy to memory.

ブルームフィルター

ブルームフィルターはSSTableに保持している。
ブルームフィルターはパーティションキーを探すプロセス。

パーティションキーキャッシュ

パーティションキーは、小さなメモリを利用する。
サイズの指定に関しては、キーキャッシュのサイズとなる。

パーティションIndex

パーティションIndexはディスク上に保持されている。

OffSetMap

Offset mapはパーティションキーのポインターを保持している。
このmapは、オフヒープメモリで保持されている。

書き込み処理

Memtable

書き込みを行うとき、まずメモリに保存する。
成功後に、ディスク上のCommit Logに書き込み。

また、Memtableはパーティション単位のキャッシュデータである。

書き込みは、CassandraのMemTableに書き、その後Commit Logに書く。
最後にデータのフラッシュで、SSTableに書き込みを行う。

以下にWrite処理フローを記述する。

  1. Write処理の実行を行う。
  2. MemTableに書き込みを行う。
  3. Commit Logに書き込みを行う。
  4. フラッシュして、SSTablemに書き込みを行う。



削除処理

Cassandraは削除する論理フラグを内部で保持している。
その論理フラグを物理削除するタイミングは、コンパクションとなっている。
なので、そのコンパクションは行われるまで実質データは消えていない。ただ、もちろんデータの参照はできない。

またその他の削除として、データに対してTTLを設定することができる。
TTLを設定するとコンパクションのタイミングではなく、最終更新日時からのTTLで自動で削除される。

論理フラグをTombstoneといい、その設定値はgc_grace_secondsとなっている。

以下に削除処理のフローを記述する。

  1. 削除処理を実行する。
  2. コンパクションでSSTableのマージ処理を行う。
  3. Tombstoneのデータを削除する。
  4. 新しいSSTableへマージする。
  5. 古いSSTableを削除する。



Tombstone

内部で保持されている論理削除フラグ。

コンパクション

先述したように、Cassandraはリアルタイムで書き込み処理をしていない 。
コンパクションを定期的に実行することで、ディスクに反映し、健康状態を保っているのである。

コンパクションの種類

  • SizeTieredCompactionStrategy (STCS)
    • 書き込み処理が多いシステムにおすすめ。
  • LeveledCompactionStrategy (LCS)
    • 読み込み処理が多いシステムにおすすめ。
  • DateTieredCompactionStrategy (DTCS)
    • データを長く保持しないシステムにおすすめ。

SizeTieredCompactionStrategy(STCS)

  1. 推奨しているコンパクション
  2. 書き込み処理に強い

LeveledCompactionStrategy(LCS)

  1. 読み込み処理に強い
  2. メモリ使用量が多く、マシンの見積もりが難しい
    • I/O使用量が高い

DateTieredCompactionStrategy(DTCS)

  1. データを永続化するが、ある一定の時間がたてば自動で消したいときにおすすめ。