クエリキャッシング
Hyperdriveは、データベースに対して実行される最も人気のあるクエリを自動的にキャッシュし、すべてのクエリに対してデータベースに戻る必要(レイテンシとデータベースの負荷を伴う)を減らします。
Hyperdriveはデータベースプロトコルを使用しているため、データベースに書き込むクエリ(ミューテイティングクエリ)と読み取り専用のクエリ(ノンミューテイティングクエリ)を区別でき、Hyperdriveは安全に読み取り専用クエリをキャッシュできます。
SELECTとINSERTの違いを判断するだけでなく、Hyperdriveはデータベースのワイヤプロトコルを解析し、ミューテイティングクエリとノンミューテイティングクエリを区別するために使用します。
例えば、ニュースサイトのフロントページを表示する読み取りクエリはキャッシュされます:
-- キャッシュ可能SELECT * FROM articlesWHERE DATE(published_time) = CURRENT_DATE()ORDER BY published_time DESCLIMIT 50ミューテイティングクエリ(INSERT、UPSERT、または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ごとにキャッシュを無効化します。
例えば:
# 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,});- Hyperdriveの動作についてもっと学ぶ。
- HyperdriveからPostgreSQLに接続する方法を学ぶ。
- データベースをHyperdriveに接続する際の一般的な問題のトラブルシューティングを確認する。