今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

GAEのDatastoreに保存したオブジェクトのIDは同じ値になることがある

今日、GAEのDatastoreに保存したオブジェクトの内容をチェックしようとしてびっくりした。
Datastore Viewerから参照してみたら、同じID/Nameが複数並んでた。

Keyはprimary keyだから同じ値になるはずがないのに、なんて思いつつ「id=????」をクリックしてEdit Entityの画面で確認してみたら、Entity Keyの値が微妙に違ってた。

これらのKeyは、Transaction Groupにするために、Datastore#allocateId()で生成したもの。生成するときに ancestorKeyが違ってる場合は、IDに同じ値が割り当てられることがあるらしい。

気になったので、もうちっとしっかり見てみたら、ancestorKeyが同じ場合は違う数値が割り当てられるようだった。

IDもユニークになるもんだろうって思い込んでたから、マジでびっくりした。