因果整合性
因果整合性または因果一貫性は、主要なメモリ一貫性モデルの1つである。並行プログラミングでは、並行プロセスが共有メモリにアクセスする場合、整合性モデルによって、どのアクセスが合法であるかを制限する。分散共有メモリや分散トランザクションにおける正しいデータ構造を定義するのに役立つ。
因果整合性は「パーティションの下でも利用可能」であり、プロセス間のネットワーク接続が機能していなくても（ネットワークがパーティションされていても）、プロセスがメモリを読み書きできる（メモリが利用可能）非同期モデルである。パーティションの下では安全性とライブ性を両立できず、同期を必要とするため応答が遅くなる逐次整合性や線形性などの強力な整合性モデルとは対照的である。
因果整合性は、1990年代に共有メモリモデルの弱い整合性モデルとして提案された。因果的整合性は、通信プロトコルにおける因果的ブロードキャストの概念と密接に関連している。これらのモデルでは、Lamportのhappened-beforeの概念に基づく潜在的な因果関係に基づいて、分散実行を部分的な順序として表現する。
因果的整合性は、プログラマの時間に関する直感に合致し、強力な整合性モデルよりも利用しやすく、かつ最終的な整合性よりも有用な保証を提供するため、有用な整合性モデルである。例えば分散データベースでは、結果一貫性とは対照的に、因果的一貫性は操作の順序付けをサポートしている。
時間と順序は我々の直感にとって非常に基本的なものであるため、因果整合性を保証しないシステムを推論することは困難である。しかし、多くの分散データベースは、直列化可能性を提供するものでさえ、この保証を欠いている。Spannerは因果一貫性を保証するが、強い一貫性も強制するため、パーティション下での可用性がない。因果関係の一貫性を保証するデータベースとしては、MongoDBやAntidoteDBなどがある。