忍者ブログ
IT関係の小作人労働の日々の日記です。 最近データベースが好きです。 インフラ構築、DB構築、アプリケーション開発・・・何でも屋です。 何でもできそうで、何にもできない。

【データベースの知識】直列可能性(Serializability)と線形可能性(Linearizability)


一貫性のあるデータ操作を理解する上で、「直列可能性」と「線形可能性」は非常に重要な概念です。どちらも「正しく動く」ことを保証するためのルールですが、その焦点は異なります。

1. 直列可能性(Serializability)

【 基本 】 複数のトランザクションを並列に実行した結果が、それらを「何らかの順序で一つずつ順番に(直列に)実行した結果」と同じになることを保証します。これは「トランザクション」の境界を守るための概念です。

[ 直列可能性のイメージ ]
T1: [---A---]
T2: [---B---]
並列実行しても、結果が「T1 → T2」または「T2 → T1」の実行結果と一致すればOK。
焦点:複数操作(トランザクション)の整合性
範囲:データベース全体の整合性

2. 線形可能性(Linearizability)

【 基本 】 単一のオブジェクトに対する操作が、「ある一瞬」で完了したかのように見えることを保証します。書き込みが完了した瞬間、その後の読み込みは必ず最新の値を返す必要があります。「リアルタイム性」を重視する概念です。

[ 線形可能性のイメージ ]
書き込み: [--- Write(X=10) ---]
読み込み: [--- Read(X) ---] → 必ず 10 が返る
焦点:単一オブジェクト、単一操作の最新性
範囲:時間軸に沿った最新情報の提供

3. まとめ:違いのポイント

この二つは独立した概念ですが、組み合わせて「厳密な直列可能性(Strict Serializability)」として実装されることもあります。

直列可能性:並列実行しても、順番にやったのと同じ結果になる(マルチステップ重視)
線形可能性:操作が完了した瞬間に全員が最新値を見れる(時間的即時性重視)


システムの要件に応じて、どのレベルの整合性が必要かを見極めることが、堅牢なシステム設計の第一歩となります。


PR