結果整合性
対象リージョン:東日本第3/西日本第3
オブジェクトストレージへの書込み操作に対する読込みの結果には、「書き込み後の読み込み整合性」と「結果整合性」の2種類があります。
書き込み後の読み込み整合性
オブジェクトの新規作成は「書き込み後の読み込み整合性」になります。
以下に例を示します。
利用者Aの書込み(①)完了後に、利用者Bの書込み(②)が完了しています。このあとの読込み(③と④)の結果は必ず②になります。
以下の操作は結果整合性になります。
- オブジェクト名に対してHEADまたはGETリクエストを実行する場合(例えば、オブジェクトを新規作成する前にオブジェクト名が使用されているかどうかを調べる場合)
- コンテナ/バケットに対してGETを実行し、オブジェクト一覧を取得する場合
- コンテナに対してHEADを実行し、コンテナのメタデータを取得する場合
結果整合性
オブジェクトの上書きや削除は「結果整合性」になります。オブジェクトの上書きや削除を実行したあとの読み込み結果に、古いデータや別のユーザーによる変更結果が返される場合があります。ただし、壊れたデータや部分的なデータが返されることはありません。
これは、高可用性を実現するためのレプリケーション(複数のサーバ間でデータを複製)に時間がかかるためです。
- 結果整合性の複数のサーバ間でのデータ複製は、通常数秒から数分で完了しますが、基盤の負荷状況によっては数日かかることがあります。
- 同じキーに対して2つのPUTリクエストが同時に行われた場合、最新のタイムスタンプを持つリクエストが優先されます。
以下に例を示します。
利用者Aの書込み(①)完了後に、利用者Bの書込み(②)が完了しています。このあとの読込み(③と④)の結果は経過時間によって①または②になります。
「書き込み後の読み込み整合性」と「結果整合性」の違い
書き込み後の読み込み整合性のある読み込み | 結果整合性のある読み込み |
---|---|
古いデータを読み込まない | 古いデータを読み込むことがある |
読込み時間が長くなることがある | 読込み時間が短い |
読込み性能が小さくなることがある | 読込み性能は最大 |
結果整合性の動作例
複数の利用者が同じオブジェクトに書き込んだ場合の動作例を以下に示します。
-
書込みの途中で読込みが発生した場合
利用者Bの書込み(②)の途中で利用者Aによる読込み(③)が発生しています。この場合、利用者Aの読込み(③)の結果としては、①または②になります。また、経過時間によっては結果が返ってこない場合もあります。
-
書込みのタイミングが重複した場合
利用者Aの書込み(①)の途中で利用者Bの書込み(②)が発生しています。この場合、書込みの結果として①か②のどちらになるかは不明です。利用者Aと利用者Bの読込み(③と④)の結果としては、①または②のどちらかになる可能性があります。また、経過時間によっては結果が返ってこない場合もあります。