結果整合性
オブジェクトストレージへの書込み操作に対する読込みの結果には、「書き込み後の読み込み整合性」と「結果整合性」の2種類があります。
書き込み後の読み込み整合性
オブジェクトの新規作成は「書き込み後の読み込み整合性」になります。
以下に例を示します。
利用者Aの書込み(①)完了後に、利用者Bの書込み(②)が完了しています。このあとの読込み(③と④)の結果は必ず②になります。
注意事項
- オブジェクト名に対してHEADまたはGETリクエストを実行する場合(例えば、オブジェクトを新規作成する前にオブジェクト名が使用されているかどうかを調べる場合)は、結果整合性になります。
結果整合性
- オブジェクトの上書きや削除は「結果整合性」になります。
- オブジェクトの上書きや削除を実行したあとの読み込み結果に、古いデータや別のユーザーによる変更結果が返される場合があります。
- 壊れたデータや部分的なデータが返されることはありません。
「書き込み後の読み込み整合性」と「結果整合性」の違い
書き込み後の読み込み整合性のある読み込み | 結果整合性のある読み込み |
---|---|
古いデータを読み込まない | 古いデータを読み込むことがある |
読込み時間が長くなることがある | 読込み時間が短い |
読込み性能が小さくなることがある | 読込み性能は最大 |
結果整合性の動作例
複数の利用者が同じオブジェクトに書き込んだ場合の動作例を以下に示します。
書込みの途中で読込みが発生した場合
利用者Bの書込み(②)の途中で利用者Aによる読込み(③)が発生しています。
この場合、利用者Aの読込み(③)の結果としては、①または②になります。また、経過時間によっては結果が返ってこない場合もあります。
書込みのタイミングが重複した場合
利用者Aの書込み(①)の途中で利用者Bの書込み(②)が発生しています。
この場合、書込みの結果として①か②のどちらになるかは不明です。
利用者Aと利用者Bの読込み(③と④)の結果としては、①または②のどちらかになる可能性があります。また、経過時間によっては結果が返ってこない場合もあります。
注意事項
- 同じキーに対して2つのPUTリクエストが同時に行われた場合、最新のタイムスタンプを持つリクエストが優先されます。
- 以下に例を示します。
利用者Aの書込み(①)完了後に、利用者Bの書込み(②)が完了しています。このあとの読込み(③と④)の結果は経過時間によって①または②になります。