データはどのように更新されるか

DataStax Enterpriseデータベースでのデータの更新方法に関する簡単な説明。

DataStax Enterpriseデータベースは、新しい行をそれぞれupsertとして扱います。既存の行と同じプライマリ・キーが新しい行に存在する場合、データベースは、その行を既存の行の更新として処理します。

書き込み中、DataStax Enterpriseは、重複するレコードが存在するかどうかをチェックせずに、新しい行をそれぞれデータベースに追加します。このポリシーにより、バージョンの異なる同じ行がデータベースに多数存在する可能があります。詳細については、「データはどのように更新されるか」を参照してください。

メモリーに格納された行は、定期的にSSTableという構造でディスクにストリーミングさます。データベースは、一定の間隔で、小さなSSTableを大きなSSTableにコンパクションします。このプロセス中に、データベースにバージョンの異なる同じ行が複数存在していることが判明した場合は、最新バージョンの行のみが新しいSSTableに書き込まれます。コンパクション後、データベースによって元のSSTableが削除され、古い行が削除されます。

ほとんどのDataStax Enterpriseのインストールでは、複数のノードに各行のレプリカが格納されます。各ノードは単独でコンパクションを行います。つまり、古くなったバージョンの行は1つのノードから削除されますが、別のノードにはまだ存在する可能性があることを意味します。

このような理由から、データベースは、読み取りプロセス中に、別のラウンドの比較を実行します。クライアントが特定のプライマリ・キーでデータを要求すると、DataStax Enterpriseは、複数のレプリカから多くのバージョンの行を取得します。最新のタイムスタンプが付いたバージョンのみがクライアントに返されます(「最後の書き込み成功事例」)。

注: 一部のデータベース操作では、行の部分的な更新のみが書き込まれる場合があるため、特定のバージョンの行には、すべてのカラムではなく一部のカラムが含まれていることがあります。コンパクションまたは書き込み時に、データベースは、各カラムの最新バージョンを使用して、部分的な更新を各行の完全なバージョンにまとめます。