ストレージ・エンジン

DataStax Enterpriseストレージ構造およびエンジンについて。

DataStax Enterpriseデータベースは、B-Treeを使用する標準的なリレーショナル・データベースとは異なり、Log-Structured Merge Treeに似たストレージ構造を使用しています。データベースは、書き込み前の読み取りを避けます。「書き込み前の読み取り」は、特に大きな分散システムの場合に、読み取りのパフォーマンスで大きなレイテンシーが発生したり、その他の問題が生じたりすることがあります。たとえば、2つのクライアントが同時に読み取りを行ってから、一方がその行を上書きして更新Aを行い、もう一方がその行を上書きして更新Bを行うと、更新Aが除去されてしまいます。この競合状態により、クエリー結果が曖昧になります。どちらの更新が正しいのでしょうか?

ほとんどの書き込みで「書き込み前の読み取り」を使用しないようにするために、ストレージ・エンジンは、挿入および更新をメモリーにグループ分けし、間隔を置いて、追加書き込みモードでシーケンシャルにデータをディスクに書き込みます。いったんディスクに書き込むと、データを変えることはできず、上書きできなくなります。データの読み取りでは、シーケンシャルに書き込まれるこの不変データを組み合わせて、正しいクエリー結果を見つける必要があります。軽量トランザクション(LWT)を使用すると、書き込み前にデータの状態を確認できます。ただし、この機能は限られた用途にのみ使用することを推奨します。

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