2012年11月13日火曜日

[AppEngine] データ更新時の Index の使用量

この間、JDO でデータを挿入・削除した場合、それぞれ
キー以外の属性数×2 + 1」回のインデックス書き込みが発生した。

念のため、JDO で属性を一つだけ更新した場合のインデックス書き込みの回数を見てみよう。
予想としては、1属性で2つのインデックスがあるから2回発生するはず。

まずデータひとつ作成
MyData data = new MyData();
data.setName("one");
data.setName2("two");
data.setNo(10L);
pm.makePersistent(data);

ResourceDaily Quota
Datastore Entity Put Ops 0 → 1
Datastore Index Write Ops 0 → 7

キー以外の属性は3つなので想定通り 7 Index Write Ops。



更新する。

Query query = pm.newQuery(MyData.class);
List<MyData> result = (List<MyData>)query.execute();
MyData data = result.get(0);
data.setName("newOne2");
pm.close();

ResourceDaily Quota
Datastore Entity Put Ops 1 → 2
Datastore Index Write Ops 7 → 11

4 Index Write Ops になった。なぜだろう。
属性を2つ更新してみる。

Query query = pm.newQuery(MyData.class);
List<MyData> result = (List<MyData>)query.execute();
MyData data = result.get(0);
data.setName("newOne2");
data.setName2("newTwo2");
pm.close();

ResourceDaily Quota
Datastore Entity Put Ops 2 → 3
Datastore Index Write Ops 7 → 19

一気に12 Index Write Ops になった。ますます理由不明
念のため何回かやってみる。

ResourceDaily Quota
Datastore Entity Put Ops 3 → 4
Datastore Index Write Ops 19 → 27

ResourceDaily Quota
Datastore Entity Put Ops 4 → 5
Datastore Index Write Ops 27 → 35

さっき、12 IWOps だったのはなんか別の理由か?
何回かやった感じでは、2属性更新では 8 Index Write Ops になるようだ。
つまり、「更新した属性数 × 4」回の Index 更新操作になる模様。

いつか、LowLevel API を使ってもう一回調べてみよう。


0 件のコメント:

コメントを投稿