Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

一貫性モデル

最終更新 Markdown で表示Agent セットアップ

このページでは R2 の一貫性モデルを説明します。R2 がグローバルに強整合である範囲と、対象となる操作をまとめます。

R2 は、ほかの分散オブジェクトストレージと比べても「強整合」と言えます。この強整合性により、R2 に対する操作は常に最新(正確)な状態を見ます。クライアントは、書き込み、更新、削除の結果を、世界中ですぐに観測できます。

用語

R2 では、強整合結果整合 を次の意味で使います。

  • 強整合 - 操作の結果は、すべてのクライアントが世界中ですぐに観測します。クライアントが「古い」(不整合な)状態を見ることはありません。
  • 結果整合 - クライアントが操作の結果をすぐには見ないことがあります。状態が世界中へ伝播するまで、数秒から 1 分程度かかることがあります。

操作と一貫性

R2 バケットとオブジェクトに対する操作は、次の一貫性を保証します。

操作 一貫性
書き込み後読み取り: オブジェクトを書き込み(アップロード)してから読む 強整合: 読み取り側は世界中ですぐに最新のオブジェクトを見ます
メタデータ: オブジェクトのメタデータを更新する 強整合: 読み取り側は世界中ですぐに更新後のメタデータを見ます
削除: オブジェクトを削除する 強整合: そのオブジェクトへの読み取りは、すぐ「存在しない」エラーを返します
オブジェクト一覧: バケット内のオブジェクトを一覧する 強整合: 一覧操作は、その時点のすべてのオブジェクトを返します
IAM: R2 Storage の権限を追加・削除する 結果整合: 新規または更新した API キー の権限が世界中へ反映されるまで、最大 1 分かかることがあります

補足:

  • 2 つのクライアントが同じキーへ書き込む(PUT または DELETE)場合、最後に完了した書き込みが採用されます。
  • マルチパートアップロードでは、すべてのパートのアップロードが成功した時点から、書き込み後読み取りの一貫性が適用されます。同じパートを複数の書き込み側が(誤って)アップロードした場合は、最後の書き込みが採用されます。
  • 同じバケット内でのオブジェクトコピーも、新規オブジェクトの書き込みと同じ書き込み後読み取り一貫性に従います。コピー完了後、コピー先オブジェクトはすべてのクライアントがすぐに読めます。
  • R2 バケットを削除するには、先にバケットを空にする必要があります。オブジェクトが残っているバケットを削除しようとすると、The bucket you tried to delete (X) is not empty (account Y)Bucket X cannot be deleted because it isn’t empty. などのエラーになります。バケットを空にして削除する手順は バケットを削除する を参照してください。

キャッシュ

カスタムドメイン を R2 バケットに接続し、そのバケットから配信するオブジェクトのキャッシュを有効にすると、キャッシュ有効なドメイン経由のアクセスでは、一貫性モデルは必然的に緩くなります。

具体的には、次を想定してください。

  • R2 から削除したオブジェクトでも、キャッシュに残っているあいだは取得できます。削除をすぐ反映する必要がある場合は、削除後に キャッシュをパージ します。
  • デフォルトでは、Cloudflare のキャッシュは HTTP 404(Not Found)レスポンスを自動でキャッシュ します。同じパスにオブジェクトをアップロードしても、キャッシュ TTL(Time to Live)が切れて R2 から新しいオブジェクトを取得するか、キャッシュをパージ するまで、キャッシュは HTTP 404 を返し続けることがあります。
  • あるキーのオブジェクトを新しいオブジェクトで上書きした場合、キャッシュ TTL の期限切れ(またはエビクション)か、キャッシュのパージまで、クライアントには以前のオブジェクトが配信され続けます。

キャッシュは Worker API バインディングS3 API 経由のアクセスには影響しません。これらの操作はバケットへ直接行われ、キャッシュを経由しません。

役に立ちましたか?