Golang の database/sql ドライバでの Cloud Spanner サポートの一般提供を開始
Google Cloud Japan Team
※この投稿は米国時間 2022 年 9 月 15 日に、Google Cloud blog に投稿されたものの抄訳です。
概要
Go SQL Spanner ドライバは、Go の database/sql/driver インターフェースの実装です。ドライバをアプリケーションに追加することで、Cloud Spanner で database/sql API の使用が可能となります。spanner を driverName として、有効な接続文字列を dataSourceName として使用します。
インストール
シェルから go ツールで $GOPATH に簡単にパッケージをインストールします。マシンとシステムの PATH に Git がインストールされていることを確認してください。
アーキテクチャ
Spanner の database/sql ドライバでは、セッション管理、データのエンコードとデコード、トランザクション管理のために、Google Cloud Spanner 向けの Go クライアント ライブラリを使用します。接続文字列
接続文字列とは、データソースとそれに接続するための方法についての情報を指定する文字列のことです。接続を開始するための文字列の情報は、基盤となるドライバまたはプロバイダにコードとして渡されます。
Cloud Spanner の一般的な接続文字列は、完全修飾されたデータベース名とオプションのパラメータ リストで構成されています。
また、接続文字列にはホストとポート番号を含めることもできます。これは、カスタム エンドポイント(インメモリ モック サーバーなど)への接続に使用でき、文字列は次のようになります。
完全な接続文字列の正規表現は、次のようになります。
なお、Spanner への接続のために Go クライアントを使用するドライバの場合、Spanner エミュレータへの接続にカスタム エンドポイントを指定する必要はありません。SPANNER_EMULATOR_HOST
の環境変数が設定されていれば、エミュレータは自動でドライバに接続されます。
使用方法
ステートメント
ドライバは、名前付きパラメータと位置パラメータの両方をサポートしています。名前付きパラメータはアンパサンド(@
)で始まります。位置パラメータは疑問符(?
)を使って表されます。
DDL ステートメント
Cloud Spanner の制限にあるように、トランザクションでは DDL ステートメントはサポートされていません。その代わりに、アクティブなトランザクションなしで、接続上で DDL ステートメントを実行することが可能です。
ここでは、実行スピードの最適化のために、複数の DDL ステートメントをまとめてバッチ処理することが推奨されています。DDL バッチとして定義することで、複数の DDL ステートメントを Cloud Spanner に 1 つのバッチとして送信できます。
また、バッチ DDL の例で確認することもできます。
制限事項
ドライバでサポートされていない Cloud Spanner の機能は、こちらに一覧化されています。
ご協力のお願い
特に、Cloud Spanner を検討している Golang のデベロッパーや、新規プロジェクトに database/sql の使用を検討されている Cloud Spanner の既存のお客様からのご意見をお待ちしています。このプロジェクトはオープンソースのため、GitHub でコメント、バグレポート、pull リクエストを行うことができます。
関連情報
始める前に、golang プロジェクトを用意する必要があります。例の詳細については、ドライバの examples ディレクトリをご覧ください。また、以下もご参照ください。
- Google Cloud ソフトウェア エンジニア Rahul Yadav