appengine ja night 5 bt schemaversionの薦め
DESCRIPTION
App Engineはスキーマレス。スキーマレスの注意点としてプロパティ(カラム)追加を例に問題点とその解決策を記載。また、それを通してindexの仕組みについて理解して頂きたい。TRANSCRIPT
appengine ja night#5Beer Talk
SchemaVersionの薦め
source: http://www.flickr.com/photos/katemonkey/122489910/
自己紹介
はてなID:bluerabbittwitterID:bluerabbit777jp
SchemaVersionは転ばぬ先の杖
Bigtableはスキーマレス
行毎に異なるプロパティを保持できる
スキーマレスの注意点
Kind(テーブル)にプロパティ(カラム)を追加した際に、過去に登録したデータはプロパティが存在しないまま。追加プロパティを使用したクエリは
条件にしたら過去データはヒットしないソートしても過去データはヒットしない
App Engineではインデックスを経由してデータを取得する
Key以外での検索時ソート使用時
KEY Value
Emp/age/20/Key2
Emp/age/30/Key3
Emp/age/40/Key4
インデックス データ
App Engineのクエリはインデックスありき
インデックスを経由してデータを取得するApp Engineでは値による検索はできない例外)下記のクエリはインデックスを使わない
DatastoreService#get(Key key)new Query("Emp").
addFilter("__key__", EQUAL, key);
プロパティがないのとプロパティがnullは異なる
【プロパティがない=Indexがない】
【プロパティがnull=Indexはある】
プロパティがないとIndexが存在しなくなり 検索できないのは困る
レコードのバージョンを揃えるためSchemaVersionを持つ
SchemaVersionのプロパティが保持しておくプロパティが増えたらカウントアップ過去データはSchemaVersionで検索して洗い替え
ご清聴ありがとうございました