AppEngineのDataStoreでインデックスを無効にした場合、書き込みコストが下がるか調べてみました。
まず、全てのModelの全てのフィールドにてindexを無効にしました。
下記のコード参照
AppEngine DataStore Model which is disabled index
class Post(db.Model): id = db.StringProperty(required=True, indexed=False) from_name = db.StringProperty(required=True, indexed=False) from_id = db.StringProperty(required=True, indexed=False) message = db.TextProperty(required=False, indexed=False) type = db.StringProperty(required=False, indexed=False) created_time = db.StringProperty(required=False, indexed=False)
上記の設定にてAppEngine上のサービスを起動。
結果:
- 各フィールド毎のインデックスは作成されなくなった。よって書き込みオペレーションの回数が減り、コスト削減。
- しかし、DataStoreのエントリーの数と同数のインデックスが作成されている。よって、書き込みオペレーションの回数は書き込んだ(Put)エントリーの2倍発生。下記のイメージ参照。
考察:
キー(Key)でしかデータを参照(Lookup)しないので、なんとかインデックスを完全に無効にしたい。推測であるが、もしかしたら、このインデックスはキーでの参照用に作成されているのかも?自分のアプリのコストは、書き込みオペレーションからくるので、どうにかしたい。。。。。。