このページでは、Cloud SQL データベース接続を効果的に使用するアプリケーションの作成に関するベスト プラクティスと言語に固有のコードサンプルについて説明します。
これらのサンプルは、GitHub で入手できる完全なウェブ アプリケーションからの抜粋です。詳細
Cloud SQL に接続されたサンプル ウェブ アプリケーションを実行する手順については、ご使用の環境に該当するリンクをクリックしてください。
- ローカル コンピュータから接続するためのクイックスタート
- Compute Engine から接続するためのクイックスタート
- Cloud Run から接続するためのクイックスタート
- Cloud Run 関数から接続するためのクイックスタート
- Google Kubernetes Engine から接続するためのクイックスタート
接続プール
接続プールは、接続レイテンシとパフォーマンスを向上させるために共有され、再利用されるデータベース接続のキャッシュです。アプリケーションでデータベース接続が必要な場合は、プールから一時的に 1 つを借ります。アプリケーションでの接続が終了すると、接続がプールに戻されます。アプリケーションで次にデータベース接続が必要とされるときに再利用できます。
接続の開閉
接続プールを使用する場合は、使用後に接続が必ずプールに返されるように、接続の開閉を適切に行う必要があります。返されなかった接続(「リーク」した接続)は再利用されないため、リソースが無駄に消費され、アプリケーションのパフォーマンスのボトルネックになることがあります。
Python
Java
Node.js
C#
Go
Ruby
PHP
接続数
すべてのデータベース接続で、クライアント側とサーバー側のリソースが使用されます。さらに、Cloud SQL では、超えてはならない接続総数の制限が課されます。作成して使用する接続の数を少なくすると、オーバーヘッドが減り、接続上限を超えずに済みます。
指数バックオフ
アプリケーションでデータベースに接続しようとしたものの、成功しない場合、データベースが一時的に使用できなくなる可能性があります。この場合、繰り返し接続リクエストを送信するとリソースが浪費されます。データベースに再びアクセスできるようにするには、追加の接続リクエストを送信する前に待機することをおすすめします。指数バックオフやその他の遅延メカニズムを使用すると、この目標を達成できます。
この再試行は、最初に接続するときや、プールから最初に接続を取得したときにのみ有効です。トランザクションの途中でエラーが発生した場合、アプリケーションはトランザクションの最初から再試行する必要があります。そのためプールの構成が適切でも、接続が失われるとアプリケーションにエラーが表示されることがあります。
Python
Java
Node.js
C#
Go
現在、database/sql パッケージには、指数バックオフを構成する機能はありません。
Ruby
PHP
現在、PDO には指数バックオフを構成する機能はありません。
接続タイムアウト
接続の試行は、さまざまな理由で失敗することがあります。ネットワーク通信が保証されることはなく、データベースが一時的に応答しなくなる可能性があります。アプリケーションが切断された接続や失敗した接続を適切に処理するようにします。
Python
Java
Node.js
C#
Go
現在、database/sql パッケージには、接続タイムアウトを構成する機能はありません。タイムアウトはドライバレベルで構成されます。
Ruby
PHP
接続の存続期間
接続の存続期間を制限することで、放棄された接続が蓄積しないようにできます。接続プールを使用すると、接続の存続期間を制限できます。
Python
Java
Node.js
現在、node-mssql Node.js ライブラリは接続期間の制御機能を提供していません。
C#
Go
Ruby
現在、ActiveRecord は接続期間の制御機能を提供していません。
PHP
現在、PDO は接続期間の制御機能を提供していません。
完全なアプリケーションの表示
完全なアプリケーションを表示するには、下のリンクをクリックしてください。
Python
Python プログラミング言語用の完全なアプリケーションを表示します。
Node.js
Node.js プログラミング言語用の完全なアプリケーションを表示します。
C#
C# プログラミング言語用の完全なアプリケーションを表示します。
Go
Go プログラミング言語用の完全なアプリケーションを表示します。
PHP
PHP プログラミング言語用の完全なアプリケーションを表示します。
次のステップ
- プライベート IP の詳細を確認する。
- App Engine と Cloud SQL の割り当てと上限について学習する。
- Cloud SQL を使用する際のベスト プラクティスについて学習する。