NoSQL、データ グリッドなどに関するさまざまな講演で、結果整合性についてよく耳にします。結果整合性の定義は、多くの情報源によって異なるようです (具体的なデータ ストレージによっても異なる可能性があります)。
具体的なデータストレージとは関係なく、一般的な意味での「最終的な一貫性」とは何かを簡単に説明してくれる人はいますか?
ベストアンサー1
最終的な一貫性:
- 天気予報を見ると、明日は雨が降るだろうと分かりました。
- 明日は雨が降るだろうと伝えます。
- あなたの隣人は奥さんに明日は晴れるだろうと伝えます。
- あなたは隣人に明日は雨が降るだろうと伝えます。
最終的に、すべてのサーバー (あなた、私、あなたの隣人) は真実 (明日は雨が降る) を知りますが、その間にクライアント (彼の妻) は、1 つ以上のサーバー (あなたと私) のより最新の値があるかどうか尋ねたにもかかわらず、晴れるだろうと思い込んでいました。
厳密な一貫性 / ACID 準拠とは対照的に:
- あなたの銀行残高は50ドルです。
- 100ドルを入金します。
- どこの ATM からでも照会できるあなたの銀行残高は 150 ドルです。
- あなたの娘があなたのATMカードで40ドルを引き出しました。
- どこの ATM からでも照会できるあなたの銀行残高は 110 ドルです。
いかなる場合も、お客様の残高は、その時点までにお客様のアカウントで行われたすべての取引の実際の合計額以外のものを反映することはありません。
の理由多くの NoSQL システムが結果整合性を備えている理由は、事実上すべてが分散型として設計されており、完全に分散されたシステムでは厳密な整合性を維持するために非常に線形なオーバーヘッドが発生するためです (つまり、速度が低下し始める前にスケーリングできる範囲は限られており、速度が低下した場合は、スケーリングを維持するために指数関数的に多くのハードウェアを問題に投入する必要があります)。