背景
同一プロジェクト内のDatastoreでテスト環境・本番環境のデータを分ける必要があった。
その時、名前空間について調査することがあったので、備忘録としてまとめる。
名前空間とは?
1つのアプリケーションを異なるデータセットに対して動作させることを簡単にできるようにする仕組みのこと。
例えば、名前空間Aの場合は名前空間A用のDatastore、名前空間Bの場合は名前空間B用のDatastoreにアクセスできるようになります。
Datastoreの他にも以下も対応しています。
- Memcache
- Task Queue
- Search
参考:https://cloud.google.com/appengine/docs/java/multitenancy/multitenancy
使い方
以下のようにcontext.Contextにnamespaceを設定するだけで使用準備完了です。
example.gp
c := appengine.NewContext(r)
c = appengine.Namespace(c,"your-namaspace-name")
Datastoreへアクセスする時に名前空間対応したcontext.Contextを渡すだけで、データを切り替えることができます。
example.gp
func GetBeaconList(c context.Context) ([]Beacon, error) {
var tmp []Beacon
// 名前空間をセットしたcontextを渡すだけ
_, err := datastore.NewQuery("beacon").GetAll(c, &tmp)
if err != nil {
return nil, err
}
return tmp, nil
}