2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SurrealDBとGo

Last updated at Posted at 2023-05-31

本記事の目的

弊社で使用しているかなり参照用のRestAPIのストレージをRedisからSurrealDBへ置き換えた際の知見を基にした記事です。
所感としてはリレーショナルなストレージとしてはフットプリントがとても軽くて割り切った運用では有用だなと感じました。SQLiteやKeyValue系のストレージと競合する印象です。

SurrealDB

Goのドライバは以下で提供されています。
https://github.com/surrealdb/surrealdb.go

以下のコードはGo1.18.4で動作確認しております。

Signin

  • 認証用のメソッドです。ユーザーとパスワードを指定します。
	surrealdbHost := os.Getenv("SURREALDB_HOST")
	surrealdbPort := os.Getenv("SURREALDB_PORT")

	if surrealdbHost == "" {
		surrealdbHost = "127.0.0.1"
	}
	if surrealdbPort == "" {
		surrealdbHost = "8000"
	}
	db, err := surrealdb.New(fmt.Sprintf("ws://%s/rpc", surrealdbHost))
	if err != nil {
		panic(err)
	}
    surrealdbUser := os.Getenv("SURREALDB_USER")
    surrealdbPassword := os.Getenv("SURREALDB_PASSWORD")

	if _, err = db.Signin(map[string]interface{}{
		"user": surrealdbUser,
		"pass": surrealdbPassword,
	}); err != nil {
		panic(err)
	}

Use

  • 名前空間とデータベース(スキーマ)を指定します。

Create

  • レコード作成に使うメソッドになります。
  • 第一引数に{テーブル名}:{主キー}の書式で記載します。主キーを省いた場合にはUUIDが割り当てられます。
		dbRecord := map[string]string{
			"zipcode": record[2],
			"pref":    record[6],
			"city":    record[7],
			"town":    record[8],
		}
		//createには作成したレコードがそのまま戻る
		create, err := db.Create("zipAddress", dbRecord)
		if err != nil {
			panic(err)
		}

Query

  • レコード参照に使うメソッドになります。複雑なSELECT(ORDER BY,GROUP BY等を使う場合)はほぼこちらを使うことになると思います。
  • SmartUnmarshallを使うと変換するコードを書かずに済むのでとてもスッキリ書けます。
    // 郵便番号から都道府県・市区町村・町域を取得する。
	res, err := surrealdb.SmartUnmarshal[[]ZipAddress](db.Con.Query(
		"SELECT pref,city,town,zipcode FROM zipAddress WHERE zipcode=$zipcode ORDER BY zipcode",
		map[string]interface{}{"zipcode": zipcode}))
	if err != nil {
		return nil, err
	}

SurrealDB

SurrealDBの内部構造やSurrealQLについては下記の記事が詳しいです。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?