KVの仕組み
KVは、グローバルで低遅延のキー・バリュー型データストアです。データは少数の集中データセンターに保存され、その後、アクセス後にCloudflareのデータセンターにキャッシュされます。
KVは、低遅延で非常に高い読み取りボリュームをサポートしており、高度に動的なAPIを構築することが可能です。
読み取りは定期的にバックグラウンドで再検証されますが、キャッシュにないリクエストは集中バックエンドにヒットする必要があり、高い遅延を経験する可能性があります。
KVに書き込むと、データは中央データストアに書き込まれます。データは自動的にすべてのロケーションのキャッシュに送信されるわけではありません。
ロケーションからの初回読み取りはキャッシュされた値を持っていません。データは最寄りの地域ティアから読み取られ、その後中央ティア、最終的には中央ストアから真にコールドなグローバル読み取りが行われます。最初のアクセスはグローバルに遅いですが、その後のリクエストは特にリクエストが単一の地域に集中している場合、より速くなります。
同じロケーションからの頻繁な読み取りは、他の場所から読み取ることなくキャッシュされた値を返し、最も速い応答時間を実現します。KVは、上位ティアと中央データストアからバックグラウンドでリフレッシュすることで、キャッシュ内の最新の値を維持するように努めています。
バックグラウンドで上位ティアと中央データストアからリフレッシュする際は、アクセスされているアセットがキャッシュから提供され続けるように注意深く行われます。
KVは高読み取りアプリケーション向けに最適化されています。データは中央に保存され、キャッシュにデータを保存するためにハイブリッドプッシュ/プルベースのレプリケーションを使用します。KVは、比較的まれに書き込む必要があるが、迅速かつ頻繁に読み取る必要があるユースケースに適しています。まれに読み取られる値は他のデータセンターまたは中央ストアから取得され、より人気のある値はリクエストされたデータセンターにキャッシュされます。
KVのパフォーマンスを向上させるには、デフォルトの60秒からcacheTtlパラメータを増やします。
KVはキャッシュ ↗によって高いパフォーマンスを実現し、読み取りが書き込みと最終的に一貫性を持つようになります。
変更は通常、変更が行われたCloudflareのグローバルネットワークロケーションですぐに可視化されます。他のグローバルネットワークロケーションで変更が可視化されるまでに、キャッシュされたデータのバージョンがタイムアウトするため、最大60秒以上かかることがあります。
キーが存在しないことを示すネガティブルックアップもキャッシュされるため、値が作成されたことに気付くまでの遅延は、値が変更されたときと同じです。
KVは、Redis ↗のようなインメモリデータストアのようには機能しません。KVの値にアクセスすることは、ローカルにキャッシュされている場合でも、Workerスクリプト内のメモリから値を読み取るよりも遅延が大幅に増加します。
KVは最終的に一貫性を持つことで高いパフォーマンスを実現しています。変更が行われたCloudflareのグローバルネットワークロケーションでは、これらの変更は通常すぐに可視化されます。ただし、これは保証されておらず、この動作に依存することは推奨されません。他のグローバルネットワークロケーションでは、変更が可視化されるまでに最大60秒以上かかることがあります。
変更の可視化には、特定のキーの以前のバージョンを最近読み取ったロケーション(キーが存在しないことを示す読み取りを含む、これもローカルにキャッシュされます)で時間がかかります。
書き込み後の一貫性を達成するためのアプローチは、特定のKVキーに対するすべての書き込みを対応するDurable Objectのインスタンスを通じて送信し、その後、他のWorkersでKVからその値を読み取ることです。これは、書き込みに対するより多くの制御が必要な場合に便利ですが、上記で説明したKVの読み取り特性に満足している場合に役立ちます。
Workers KVがデータをどのように保護するかを理解するには、データセキュリティドキュメントを参照してください。