コンテンツにスキップ

クエリキャッシング

Hyperdriveは、データベースに対して実行される最も人気のあるクエリを自動的にキャッシュし、すべてのクエリに対してデータベースに戻る必要(レイテンシとデータベースの負荷を伴う)を減らします。

Hyperdriveは何をキャッシュしますか?

Hyperdriveはデータベースプロトコルを使用しているため、データベースに書き込むクエリ(ミューテイティングクエリ)と読み取り専用のクエリ(ノンミューテイティングクエリ)を区別でき、Hyperdriveは安全に読み取り専用クエリをキャッシュできます。

SELECTINSERTの違いを判断するだけでなく、Hyperdriveはデータベースのワイヤプロトコルを解析し、ミューテイティングクエリとノンミューテイティングクエリを区別するために使用します。

例えば、ニュースサイトのフロントページを表示する読み取りクエリはキャッシュされます:

-- キャッシュ可能
SELECT * FROM articles
WHERE DATE(published_time) = CURRENT_DATE()
ORDER BY published_time DESC
LIMIT 50

ミューテイティングクエリ(INSERTUPSERT、またはCREATE TABLEを含む)や、PostgreSQLによってvolatileとして指定された関数を使用するクエリはキャッシュされません:

-- キャッシュされない
INSERT INTO users(id, name, email) VALUES(555, 'Matt', 'hello@example.com');
SELECT LASTVAL(), * FROM articles LIMIT 50;

デフォルトのキャッシュ設定

Hyperdriveのデフォルトのキャッシュ動作は以下のように定義されています:

  • max_age = 60秒(1分)
  • stale_while_revalidate = 15秒

max_age設定は、クエリ応答がキャッシュから提供される最大の寿命を決定します。キャッシュされた応答は、あまり使用されない場合、この時間より前にキャッシュから追い出されることがあります。

stale_while_revalidate設定により、Hyperdriveはキャッシュを再検証している間、追加の期間にわたって古いキャッシュ結果を提供し続けることができます。ほとんどの場合、再検証は迅速に行われるべきです。

最大max_ageを1時間に設定できます。

キャッシュの無効化

Wrangler CLIを使用して、--caching-disabledオプションをtrueに設定することで、Hyperdriveごとにキャッシュを無効化します。

例えば:

Terminal window
# wrangler v3.11以上が必要
npx wrangler hyperdrive update my-hyperdrive-id --origin-password my-db-password --caching-disabled true

単一のアプリケーションから複数のHyperdrive接続を構成することもできます:人気のあるクエリのキャッシュを有効にする接続と、クエリをキャッシュしたくないが、Hyperdriveのレイテンシの利点と接続プーリングの恩恵を受ける接続です。

例えば、Postgres.jsドライバを使用する場合:

const client = new Client({
connectionString: env.HYPERDRIVE.connectionString,
});
// ...
const noCachingClient = new Client({
// これはキャッシュが無効化されたHyperdriveの設定を表します
connectionString: env.HYPERDRIVE_CACHE_DISABLED.connectionString,
});

次のステップ