ストレージ・エンジン

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

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

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

上書きを回避し、シーケンシャルI/Oを使用してデータを更新するログ構造エンジンは、ハード・ディスク(HDD)やソリッドステート・ディスク(SSD)に書き込む場合に不可欠です。HDDでは、ランダムに書き込みを行うと、より多くのシーク操作が必要になり、かなりのペナルティーがかかります。

多くのデータベースの場合、書き込み増幅はSSDで問題になります。これらのドライブでは、書き込む前にメモリーを消去する必要があります。データを書き換えるには、ドライブの一部を読み取り、更新し、新しい場所に書き込む必要があります。また、書き込みが発生する前に以前に使用されていた場合は新しい場所を消去します。したがって、新しいデータで実際に必要とされるよりもはるかに大きなドライブの部分を、消去して書き換える必要があります。この書き込み増幅の現象は、SSDの寿命と速度に影響を与えます。

データベースはシーケンシャルに不変ファイルを書き込んで書き込み増幅とディスク障害を防ぐため、データベースは安価な市販のSSDに非常によく対応します。