LoginSignup
3
1

More than 3 years have passed since last update.

Go + NoSQL(Couchbase) アプリ開発 ステップバイステップガイド (1)

Last updated at Posted at 2020-12-17

はじめに

Go + NoSQL(Couchbase) を使ったアプリ開発をステップバイステップで解説していきます。本記事は、シリーズの初回として位置付けられます。

今回は、データベースへの接続と、データの登録・取得という、基本的な部分を確認します。

その後、格納されたデータを確認する際に、SQLのJSONドキュメント用の拡張である、Couchbaseのクエリ言語、N1QL(Non 1st-normal-form Query Language: 非第一正規化クエリ言語)の利用について解説します。

前提

  • Go
    • 開発環境がセットアップされている
  • Couchbase Server
    • 開発環境にインストールされている(localhostでアクセス可能)
    • 管理者ユーザが作成されている(ID: Administrator、パスワード: password
    • Bucket(go_app)が作成されている
    • コマンドラインツールにパスが通っている
  • gitが利用できる環境

動作確認環境

  • Mac OS Catalina Version 10.15.6
    • コマンドラインツールパス:/Applications/Couchbase Server.app/Contents/Resources/couchbase-core/bin/
  • Go 1.15.5
  • Couchbase Server 7.0 BETA

プログラム解説

まずは、プログラムを示します。処理内容について、コメントを参照ください。

package main

import (
    "fmt"
    "time"

    gocb "github.com/couchbase/gocb/v2"
)


func main() {
    // クラスターへの接続
    cluster, err := gocb.Connect(
        "localhost",
        gocb.ClusterOptions{
            Username: "Administrator",
            Password: "password",
        })
    if err != nil {
        panic(err)
    }
    // バケットへの参照の取得
    bucket := cluster.Bucket("go_app")

    // バケットに接続され確実に利用可能になるまで待つ
    err = bucket.WaitUntilReady(5*time.Second, nil)
    if err != nil {
        panic(err)
    }

    // コレクションへの参照の取得(デフォルトコレクションを利用)
    collection := bucket.DefaultCollection()

    // ドキュメントの定義(ユーザ情報)
    docUser := map[string]string{"id": "001", "name": "佐藤", "type": "user"}
    // ドキュメントIDの定義
    docId := "user_001"

    // ドキュメントをUpsertする
    upsertResult, err := collection.Upsert(docId, docUser, &gocb.UpsertOptions{})
    if err != nil {
        panic(err)
    }
    // UpsertResultからCAS値を出力
    fmt.Println(upsertResult.Cas())

    // ドキュメントをGetする
    getResult, err := collection.Get(docId, &gocb.GetOptions{})
    if err != nil {
        panic(err)
    }

    // GetResultから、Contentを取得
    var myContent interface{}
    if err := getResult.Content(&myContent); err != nil {
        panic(err)
    }
    // Contentを出力
    fmt.Println(myContent)

}

プログラムをGithubで公開していますので、下記のように取得してください。

git clone https://github.com/YoshiyukiKono/couchbase_step-by-step_go_jp.git

プログラム実行例を下記に示します。

$ go run couchbase.go 
1608177225724985344
map[id:001 name:佐藤 type:user]

実行結果確認

Couchbase Serverのコマンドラインツール(cbq)を使って、登録されたデータを確認します。

$ cbq -u Administrator
 Enter Password: 
 Connected to : http://localhost:8091/. Type Ctrl-D or \QUIT to exit.

まず、プライマリインデックスを作成します。

cbq> CREATE PRIMARY INDEX go_app_primary ON go_app;

クエリを実行します。

cbq> SELECT id, name, type from go_app where name = "佐藤";
{
    "requestID": "7855dbe1-7f4e-4867-9740-1fbe9b4436c1",
    "signature": {
        "id": "json",
        "name": "json",
        "type": "json"
    },
    "results": [
    {
        "id": "001",
        "name": "佐藤",
        "type": "user"
    }
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "5.705668ms",
        "executionTime": "5.637332ms",
        "resultCount": 1,
        "resultSize": 77,
        "serviceLoad": 2
    }
}

最後に

今回の記事は以上です。

今回は、データベースへの接続と、データの登録・取得という、基本的な部分を確認しました。

今回のプログラムでは、キーによるアクセスのみを扱い、クエリでのアクセスについては、コマンドラインツールのみで扱いましたが、クエリをプログラムで実行することも、当然可能です。また、クエリについては、今回紹介したような単純なものではなく、一般にSQLを使った開発で用いられているようなもっと複雑なものが利用可能です。これについては、今後の記事で紹介できればと思っています。

参考情報

下記で、Couchbase Go SDKを使った様々な処理のサンプルプログラムを見つけることができます。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1