Spanner database/sql ドライバを使用する

Go database/sql は、Go プログラミング言語の SQL(または SQL に似た)データベースを扱う汎用インターフェースです。アプリケーションで database/sql を使用するには、Spanner database/sql ドライバを使用します。

Spanner database/sql ドライバをインストールする

アプリケーションで Spanner database/sql ドライバを使用するには、次のモジュールを go.mod ファイルに追加します。

  github.com/googleapis/go-sql-spanner

Spanner database/sql ドライバを使用する

Spanner データベースへのデータベース/SQL 接続を作成するには、ドライバ名として spanner を使用し、接続文字列として完全修飾データベース名を使用します。

import (
	"database/sql"
	"fmt"

	_ "github.com/googleapis/go-sql-spanner"
)

func connect(projectId, instanceId, databaseId string) error {
	dsn := fmt.Sprintf("projects/%s/instances/%s/databases/%s", projectId, instanceId, databaseId)
	db, err := sql.Open("spanner", dsn)
	if err != nil {
		return fmt.Errorf("failed to open database connection: %v", err)
	}
	defer func() { _ = db.Close() }()

	fmt.Printf("Connected to %s\n", dsn)

	return nil
}

詳細については、Spanner データベース/SQL ドライバの GitHub リポジトリをご覧ください。

サポートされている機能

Spanner Go database/sql サンプルコード ディレクトリには、よく使用される Spanner 機能のすぐに実行できるサンプルが含まれています。

パフォーマンスのヒント

Spanner データベース/SQL ドライバを使用するときに可能な限り高いパフォーマンスを実現するには、次のベスト プラクティスに従ってください。

  • クエリ パラメータ: SQL ステートメントでインライン値を使用する代わりに、クエリ パラメータを使用します。これにより、Spanner は頻繁に使用される SQL ステートメントの実行プランをキャッシュに保存して再利用できます。
  • データベース定義言語(DDL): 複数の DDL ステートメントを 1 つのバッチにグループ化します。
  • データ操作言語(DML): 複数の DML ステートメントを 1 つのバッチにグループ化し、1 つずつ実行しないようにします。
  • 読み取り専用トランザクション: データを読み取るだけのワークロードには、読み取り専用トランザクションを使用します。読み取り専用トランザクションはロックを取得しません。
  • タグ: リクエストタグとトランザクション タグを使用してトラブルシューティングを行います。

次のステップ

  • database/sql ドライバで Spanner を使用する方法については、コード例をご覧ください。
  • database/sql の詳細を確認する。
  • Spanner で GORM を使用する。
  • GitHub の問題を提出して、機能リクエストやバグを報告するか、Spanner データベース/SQL ドライバについて質問します。