ストレージ・エンジン

Cassandraのストレージ構造およびストレージ・エンジンの説明。

Cassandraは、B-Treeを使用する標準的なリレーショナル・データベースとは異なり、Log-Structured Merge Treeに似たストレージ構造を使用しています。Cassandraは、書き込み前の読み取りを避けます。「書き込み前の読み取り」は、特に大きな分散システムの場合、読み取りのパフォーマンスを低下させたり、その他の問題を引き起こすことがあります。たとえば、2つのクライアントが同時に読み取りを行ってから、一方がその行を上書きして更新Aを行い、もう一方がその行を上書きして更新Bを行うと、更新Aが除去されてしまいます。また、書き込み前に読み取りを行うと、キャッシュが不整合になり、I/Oの必要が増えます。「書き込み前の読み取り」の状況を回避するために、ストレージ・エンジンは、行う挿入/更新をグループ分けし、行の更新部分だけを追記モードでシーケンシャルに書き込みます。Cassandraでは、既存のデータの再書き込みや再読み取りを行うことも、行をその場所で上書きすることもありません。

上書きを回避し、シーケンシャルI/Oを使用してデータを更新するログ構造エンジンは、ソリッドステート・ディスク(SSD)やハード・ディスク(HDD)に書き込む場合に不可欠です。HDDの場合、ランダムに書き込むと、シーケンシャルな書き込みよりも多くのシーク操作が必要になります。シークによる負担は非常に大きくなる可能性があります。シーケンシャルI/Oを使用して(これによって、書き込み増幅とディスク障害を防ぎます)、Cassandraでは安価な市販のSSDに非常によく対応します。