ハイパードライブの仕組み
Cloudflareのグローバルネットワーク(300以上のデータセンターのロケーション ↗から構成)から従来の中央集権型データベースに接続することは、クエリがこれらのロケーションのいずれかから発生する可能性があるため、いくつかの課題を提示します。
データベースが中央に位置している場合、クエリがデータベースに到達し、戻るまでに時間がかかることがあります。接続を確立し、複数の往復を行う必要がある状況では、クエリにかかる時間はさらに長くなります。
従来のデータベースは通常、最大接続数を処理します。適度に大きな分散トラフィックがある場合、これらの接続を使い果たすのは簡単です。
ハイパードライブは、オリジナルのデータベースへのグローバル接続数を管理し、どのクエリ応答をキャッシュするかを選択的に解析し、データベースへの負荷を軽減し、データベースクエリを加速することで、これらの課題を解決します。
ハイパードライブは、アプリケーションがデータベースに対してクエリを実行する際に再利用できるデータベースへのグローバル接続プールを作成します。
クエリがハイパードライブに到達すると、リクエストは最寄りの接続プールにルーティングされます。
接続プールに既存の接続がある場合、接続プールはその接続を再利用しようとします。
接続プールに既存の接続がない場合、新しい接続をデータベースに確立し、それを使用してクエリをルーティングします。これは、アプリケーションを運用するために必要な最小限の接続を再利用し、作成することを目指しています。
接続プールはトランザクションモードで動作し、クエリを実行するクライアントはトランザクションの期間中、単一の接続を介して通信します。
そのトランザクションが完了すると、接続はプールに戻されます。
ハイパードライブは、postgres.jsおよびnode-postgresドライバーで実装された名前付きプリペアードステートメントをサポートしています。他のドライバーの名前付きプリペアードステートメントは、パフォーマンスが悪くなる可能性があります。
ハイパードライブは、以下のPostgreSQL機能をサポートしていません:
SETステートメント。PREPARE、DISCARD、DEALLOCATE、またはEXECUTEを使用したプリペアードステートメントのSQLレベル管理。- アドバイザリーロック(PostgreSQLドキュメント ↗)。
LISTENおよびNOTIFY。PREPAREおよびDEALLOCATE。- 他の場所でサポートされていると明示的に文書化されていないセッションごとの状態の変更。
アプリケーションからこれらのサポートされていないステートメントを発行する必要がある場合、ハイパードライブチームは、ハイパードライブなしで直接クライアントを設定することを推奨します。
ハイパードライブは、データベースへの非変異(読み取り)クエリのキャッシングをサポートしています。
クエリがハイパードライブを介して送信されると、ハイパードライブはクエリを解析し、そのクエリが変異(書き込み)クエリか非変異(読み取り)クエリかを判断します。
非変異クエリの場合、ハイパードライブは設定されたmax_ageのために応答をキャッシュし、その後のクエリが元のクエリと一致する場合、ハイパードライブはキャッシュされた応答を返し、オリジナルのデータベースにクエリを発行する必要を回避します。
キャッシングは、オリジナルのデータベースへの負担を軽減し、クエリの応答時間を加速します。