DS201学習記録:CassandraのWrite PathとRead Path

DS201: Foundations of Apache Cassandra™ and DataStax Enterprise の学習記録です。

Cassandraは、その高い書き込み性能と読み込み性能を支えるために、独自のデータ格納・取得メカニズムを持っています。

Write Path (書き込みパス)

Cassandraにおけるデータの書き込み操作(Write Path)は、以下のステップで実行されます。

  1. Commit Log (コミットログ) への書き込み: Cassandraは、データの変更リクエストを受け取ると、まずその変更をコミットログに追記します。コミットログはディスク(HDDまたはSSD)上に配置され、データの永続性を保証するための重要な役割を果たします。これにより、Cassandraがクラッシュした場合でも、コミットログからデータを回復できます。

  2. Memtable (メモリテーブル) への書き込み: コミットログへの書き込みと並行して、データはRAM(ランダムアクセスメモリ)内のMemtableにも書き込まれます。Memtableは、インメモリのデータ構造であり、データの追加や更新を高速に処理するために使用されます。最新のデータバージョンを保持し、高速な読み書きアクセスを提供します。

  3. SSTable (Sorted String Table) へのフラッシュ: Memtable内のデータが一定のサイズに達するか、一定時間が経過すると、CassandraはMemtableの内容をディスク上のSSTableに書き出します(フラッシュ)。SSTableは、ソートされたキーと値のペアで構成される不変(immutable)なファイル形式であり、効率的な読み取り操作を可能にします。SSTableはCassandraの永続的なデータストレージです。

このプロセスにより、Cassandraは高速な書き込みを実現しつつ、データの耐久性も確保しています。

Read Path (読み込みパス)

Cassandraにおけるデータの読み込み操作(Read Path)は、以下のステップで実行されます。

  1. Bloom Filter (ブルームフィルタ) の検索: データの読み取りリクエストが発生すると、Cassandraはまずメモリ内のブルームフィルタを検索します。ブルームフィルタは、特定のデータがSSTableに存在するかどうかを高速に判断するための確率的データ構造です。データが存在しない可能性が高いと判断された場合、ディスクアクセスをせずに読み取り操作を終了することで、ディスクI/Oを最小限に抑えます。

  2. Memtableの検索: ブルームフィルタでデータが存在する可能性が示された場合、次にCassandraはMemtableを検索します。Memtableには最新のデータが格納されているため、ここでデータが見つかれば、ディスクアクセスなしで高速にデータを取得できます。

  3. SSTableの検索とマージ: Memtableにデータが見つからなかった場合、Cassandraはディスク上のSSTableを検索します。データは複数のSSTableに分散して格納されている可能性があるため、Cassandraは複数のSSTableからデータを読み込み、マージソートアルゴリズムを使用して、最新のデータバージョンを統合します。

  4. キャッシュへのロード: ディスクから読み込まれたデータは、次回以降の読み取りを高速化するために、メモリ内のキャッシュ(Key CacheやRow Cacheなど)にロードされます。これにより、同じデータへのアクセスがあった場合にディスクアクセスを回避し、高速なメモリアクセスでデータを提供できます。

これらのWrite PathとRead Pathの最適化されたメカニズムにより、Cassandraは高いスループットと低レイテンシでのデータ操作を実現しています。