例: Go の App Engine アプリケーション

この例は、Cloud Bigtable を使用して自分の Google アカウントから訪問数を追跡するためのウェブ インターフェースを、Go で記述された App Engine アプリケーションにより実現したものです。このアプリケーションは、ローカルの Docker コンテナでもクラウドの App Engine フレキシブル環境でも動作します。このアプリケーションのコードは GitHub リポジトリ GoogleCloudPlatform/golang-samplesbigtable/usercounter ディレクトリにあります。

サンプルコードの概要

このサンプルコードは、起動すると Cloud Bigtable の管理クライアントを作成します。続いて、このクライアントを使用して、ユーザーが指定した Cloud Bigtable インスタンスを調べ、1 つの列ファミリー emails を含む user-visit-counter という名前のテーブルが存在するかどうかをチェックし、存在しなければそのテーブルと列ファミリーを作成します。

adminClient, err := bigtable.NewAdminClient(ctx, project, instance)
if err != nil {
	log.Fatalf("Unable to create a table admin client. %v", err)
}
tables, err := adminClient.Tables(ctx)
if err != nil {
	log.Fatalf("Unable to fetch table list. %v", err)
}
if !sliceContains(tables, tableName) {
	if err := adminClient.CreateTable(ctx, tableName); err != nil {
		log.Fatalf("Unable to create table: %v. %v", tableName, err)
	}
}
tblInfo, err := adminClient.TableInfo(ctx, tableName)
if err != nil {
	log.Fatalf("Unable to read info for table: %v. %v", tableName, err)
}
if !sliceContains(tblInfo.Families, familyName) {
	if err := adminClient.CreateColumnFamily(ctx, tableName, familyName); err != nil {
		log.Fatalf("Unable to create column family: %v. %v", familyName, err)
	}
}
adminClient.Close()

次にこのサンプルコードは、後続の読み取りと書き込みに使用する Cloud Bigtable クライアントを 1 つ作成します。

client, err = bigtable.NewClient(ctx, project, instance)
if err != nil {
	log.Fatalf("Unable to create data operations client. %v", err)
}

最後に、このサンプルコードは App Engine サーバーのルートに HTTP ハンドラを追加します。このハンドラは、各リクエストについて、必要であればログインするようにユーザーに要求します。その後、そのユーザーのメールアドレスの行で Increment オペレーションを実行して、ユーザーの訪問を追跡します。

tbl := client.Open(tableName)
rmw := bigtable.NewReadModifyWrite()
rmw.Increment(familyName, u.Email, 1)
row, err := tbl.ApplyReadModifyWrite(ctx, u.Email, rmw)
if err != nil {
	return &appError{err, "Error applying ReadModifyWrite to row: " + u.Email, http.StatusInternalServerError}
}

ハンドラは、行の値を増加させた後に、現在のユーザーの総訪問数を示す HTML ページを表示します。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Bigtable ドキュメント