Cloud Spanner で Golang の GORM のサポートが一般提供に
Google Cloud Japan Team
※この投稿は米国時間 2023 年 11 月 8 日に、Google Cloud blog に投稿されたものの抄訳です。
はじめに
GORM は、Golang 向けのオブジェクト リレーショナル マッピング(ORM)ライブラリです。ORM は、オブジェクト指向のプログラミング言語を使用して、互換性のないタイプのシステム間でデータを変換します。ORM ライブラリは、この手法を実装し、リレーショナル データベースとオブジェクト指向プログラミング言語との間にオブジェクト指向レイヤを提供するライブラリです。GORM を使って開発したアプリケーションで、クラウド データベースに移行したいものはありませんか?Google Cloud Spanner が GORM Object Relational Mapper に対応するようになりました。既存の GORM のコードを Cloud Spanner で再利用することも、既存の知識を活用して新機能を作成することも可能です。
Cloud Spanner Go ORM で、GORM を介し Cloud Spanner を使うために必要なすべてのクラスやインターフェースを実装できます。以下の方法でプロジェクトに Spanner GORM モジュールを追加して、Cloud Spanner に接続しましょう。
インストール
接続
GORM を使用して Cloud Spanner に接続します。
なお、GORM の実装では Spanner への接続のために Go クライアントを使用するため、Spanner エミュレータ(GCP プロジェクトや請求先アカウントを作成しなくてもアプリケーションの開発やテストに無料で使用できる、ローカル インメモリ エミュレータ)への接続にカスタム エンドポイントを指定する必要はありません。SPANNER_EMULATOR_HOST の環境変数が設定されていれば、エミュレータは自動でドライバに接続されます。
使用方法
Cloud Spanner GORM は、位置パラメータと名前付きパラメータの両方を使用したデータのクエリ、関連付けの管理、トランザクションの実行などの標準の GORM 機能をサポートしています。また、基盤となる接続のラップを解除することで、特定の Spanner 機能(インターリーブされたテーブル、ミューテーション、ステイル読み取りなど)にも対応します。これは、GORM を使用すれば、強力かつスケーラブルなコードを作成できることを意味します。
たとえば、次のコード スニペットは、Spanner の無限のスケーラビリティを利用した Spanner への単純な書き込みと読み取りの操作を示しています。プロダクトのリリース後に、シャーディングなどのために何かを書き換える必要はなく、ノードを追加するだけで済みます。
インターリーブされたテーブル
スキーマで親子関係にインターリーブされたテーブルを使うと、パフォーマンスを向上させることができます。子テーブルを親にインターリーブするということは、子レコードが親と物理的に一緒に保存されるということです。こうした関係をモデル化し、GORM で他の関連付けとして使用できます。
ミューテーション
GORM は、デフォルトではデータ操作言語(DML)を使用します。Spanner 接続のラップを解除することで、ミューテーションを実行できます。
その他のサンプル
GitHub リポジトリには、GORM や Cloud Spanner を使用する一般的なユースケース用の複数のサンプルのディレクトリが含まれています。
制限事項
GORM でサポートされていない Cloud Spanner の機能は、こちらに一覧化されています。
ご意見をお寄せください
特に、Cloud Spanner を検討されている Golang の開発者の方や、新規プロジェクトに database/sql の使用を検討されている Cloud Spanner の既存のお客様からのご意見をお待ちしています。このプロジェクトはオープンソースのため、GitHub でコメント、バグレポート、pull リクエストを行うことができます。
このプロジェクトに協力してくれた Knut Olav Løite に感謝いたします。
関連情報
始める前に、Golang プロジェクトを用意する必要があります。例の詳細については、ドライバの examples ディレクトリをご覧ください。また、以下もご参照ください。
- Cloud Spanner のプロダクト ドキュメント
- Go で Cloud Spanner を使ってみる
- Cloud Spanner Golang クライアント ライブラリ
- Cloud Spanner の割り当てと上限
-Google Cloud、ソフトウェア エンジニア Rahul Yadav