GAE allocatedID の仕様について
allocateIdsって、その後entityをputしなくても、未来永劫重複で払い出されない保証あるのかしら? #gaeja
2013-02-03 09:11:51@hogedigo 再利用されることは無いって話だったような・・・。基本的に使う気がないので、あまり真面目に考えたことがないですが^^; #gaeja
2013-02-03 17:23:49@sinmetal Oracleのsequenceぽい使い方を考えてたんだけど・・・。大丈夫とは思うけど、仕様で明記されていないと怖いな。 #gaeja
2013-02-03 17:36:29@hogedigo 連番であることが保証されていないのと、タブレットサーバが被りまくるなので、あんまり良いものではない気がしますが、タイムスタンプとかじゃダメな感じのやつですか? #gaeja
2013-02-03 17:42:15@sinmetal 連番である必要はないです。むしろあるkindのキーをできるだけ分散させたくて、それの元になる値を別のkind名でallocateIdしようとしてるのです。ちなみにallocateIdするだけでもタブレット分割とか起きるのかな #gaeja
2013-02-03 18:00:57@hogedigo 実際にputはしないけど、Kindだけ指定してallocateIdすれば、ユニークな値が取れるぜ!という使い方ができるか?ということですか。なんか、いけそうな気はしますねw確信はないですがw #gaeja
2013-02-03 18:05:24@hogedigo allocateIdした時点で、タブレット分割が発生するのかは存じ上げませんね・・・。ユニークにしないといけないし、Keyそのものはあんまり分割とかしてないんじゃないかなという理由から、"分割されない"ような気はしますが・・・ #gaeja
2013-02-03 18:16:48@sinmetal まあタブレットについてはそんなにナーバスになることもないかなと思っていますが、重複採番は怖い。。とりあえず大丈夫なものと信じて先に進みます(^^; #gaeja
2013-02-03 18:37:28@sinmetal @hogedigo #gaeja でallocateIdでタブレット分割の件は私の理解はちょっと違います。まずKeyは昇順でソートされてputされます。その際にKeyがaa,ab,acだと同一のタブレットサーバに更新がかかる可能性が高まります。
2013-02-06 08:16:09@sinmetal @hogedigo #gaeja Keyが離れている場合は複数のタブレットサーバに更新がかかりそれは並列で実行されます。Keyが近いと並列にならず遅くなります。現在のallocateIdはこの問題を考慮した実装になっていないため、近いKeyIdが発行されます
2013-02-06 08:19:09@sinmetal @hogedigo #gaeja GoogleはallocateIdの問題を認識しており、近いKeyが発行されないように対応中です。もし、一度に大量のputがある場合はこの問題があるので、自前でkeynameを採番してKeyが分散されるようにする必要があります
2013-02-06 08:22:40@sinmetal @hogedigo #gaeja allocateIdはユニークな値が発行されるかはKind内でユニークな値が発行されるはずです。値をputせずに保持していても大丈夫です。ただ、明文化されているものは見たことが無いので確証はありませんが問題を聞いた事は無いです
2013-02-06 08:26:28タブレットサーバの件は並列うんぬんよりも、単純にタブレットサーバの負荷(put, key sort)が問題であって並列うんぬんは微々たるものかも。 #gaeja
2013-02-06 08:41:2164ビットの非負整数、みたいですよ RT @hogedigo: allocateIdsって負の値にはなることあるのかな? #gaeja
2013-02-06 08:52:49@bluerabbit777jp @sinmetal ありがとうございましたm(_ _)m その後関係者に質問する機会がありまして、entityはputしなくても大丈夫だと回答頂きました。とりあえず安心しました。#gaeja
2013-02-06 09:32:33#gaeja でIDの話があったので。AllocateIDで払い出されるIDはKind内でユニーク。再利用はない。数値は大きくなっていくが連番とは限らない。
2013-02-06 10:35:11#gaeja AppEngineでの近いKeyでのPutとタブレット分割の話は、Ikaiさんのブログが分かりやすいかな。 http://t.co/S3uT9iLP
2013-02-06 10:45:13小さくなる(間の値が用いられる)とかはないですかね〜? RT @najeira: #gaeja でIDの話があったので。AllocateIDで払い出されるIDはKind内でユニーク。再利用はない。数値は大きくなっていくが連番とは限らない。
2013-02-06 12:53:31