因果整合性
これらのモデルでは、Lamportのhappened-beforeの概念に基づく潜在的な因果関係に基づいて、分散実行を部分的な順序として表現する。
因果的整合性は、プログラマの時間に関する直感に合致し、強力な整合性モデルよりも利用しやすく、かつ最終的な整合性よりも有用な保証を提供するため、有用な整合性モデルである。例えば分散データベースでは、結果一貫性とは対照的に、因果的一貫性は操作の順序付けをサポートしている。
時間と順序は我々の直感にとって非常に基本的なものであるため、因果整合性を保証しないシステムを推論することは困難である。しかし、多くの分散データベースは、直列化可能性を提供するものでさえ、この保証を欠いている。Spannerは因果一貫性を保証するが、強い一貫性も強制するため、パーティション下での可用性がない。因果関係の一貫性を保証するデータベースとしては、MongoDBやAntidoteDBなどがある。
因果整合性(因果一貫性)とは、操作間の潜在的な因果関係を捉え、すべてのプロセスが因果関係のある操作を共通の順序で観察することを保証するものである。言い換えれば、システム内のすべてのプロセスは、因果関係のある操作の順序に同意する。因果関係のない操作の順序については、プロセス間で意見が異なることがある。
ここで、次のような関係を定義します。あるプロセスが書き込み操作Aを行い、Aを観測した(同じまたは別の)プロセスが次に書き込み操作Bを行う場合、AがBの原因となる可能性があり、AがBを「潜在的に引き起こす」または「因果的に先行する」という。因果的整合性は、AがBを因果的に先行させる場合、システム内のすべてのプロセスがBを観察する前にAを観察することを保証する。逆に、2つの書き込み操作CとDが、どちらも因果的に先行していない場合、並行、または因果的に独立という。