GAE/GO Cloud Datastoreを使ってみる

Cloud Datastoreについて

スキーマレスなオブジェクトデータベースです。

Kindと呼ばれるテーブルみたいなものに
Entityと呼ばれるオブジェクトを格納できます。
Entityには一意のKeyが割り当てられています。
EntityのフィールドはPropertyといいます。

Go言語から使う

標準のappengine/datastoreパッケージをラップしてくれた
mjibson/goonを使うのが便利でよさそうです。

goapp get github.com/mjibson/goon

Putしてみる

1
2
3
4
5
6
7
8
9
10
11
12
type Post struct {
Id string
Title string
Body string
}
//rは *http.Request
g := goon.NewGoon(r)
post := Post{Id: "1", Title: "タイトル", Body: "本文です"}
g.Put(&post)

結果:
DatastoreResult1
これだけのコードでKind作成してKeyを割り振ってくれます。
Key Nameはprimary keyの別名みたいなものですが、
ない場合はIDが割り振られます。

goonのタグをつけてみます。

1
2
3
4
5
type Post struct {
Id string `datastore:"-" goon:"id"`
Title string
Body string
}

結果:
DatastoreResult2
IdはEntityに含まれなくなり、
Key Nameに入るようになりました。

Getしてみる

Key Name指定で取得

1
2
3
4
post := Post{Id: "1"}
g := goon.NewGoon(r)
err := g.Get(&post)

全件取得

1
2
3
4
posts := []Post{}
g := goon.NewGoon(r)
g.GetAll(datastore.NewQuery("Post"), &posts)

Queryのメソッドの組み合わせて簡単なフィルターやソートは可能です。

感想

goon優秀です。
Memcacheへのキャッシュ機能もあります。
さわってみただけでしたが、Datastore自体は癖があるので、使う時は注意がいりそうです。

参考