2012-03-02 7 views
3

エンティティをある種類から別の種類にコピーしていて、longのIDを予測可能な方法でマップする必要があります。マッピングが終了したら、IDの自動生成を開始します。AppEngine allocateIdRange:CONTENTION状態についての明確化

コピーするエンティティを保護するために、私はallocateIdRangeを使用して、手動で各IDをコピーします。データストアがこれらの新しいIDを保護し、コピーの後に作成された新しいエンティティにのみ他のIDを割り当てようとするのが私の希望です。

1つの戻りコードは、私が心配していますCONTENTION

は、与えられたKEYRANGEは空ですが、データストアの自動ID アロケータがこの範囲に新しいエンティティのキ​​ーを割り当てることを示します。

  1. 他の要求は、手動ですべてのエンティティまで同じ種類と与えられたKEYRANGEなど 親とエンティティを挿入しないだろう。しかし次の のいずれかに該当する場合は、手動で、この範囲内のキーを割り当てること 安全ですこの範囲の キーが割り当てられています。

  2. 与えられたKeyRangeと同じ種類および親を持つ他の要求によって書き込まれたエンティティを上書きすることは許容されます。

ナンバー2は私のために出ています。これらのエンティティが上書きされることは容認できません。

数字1私は受け入れられると思いますが、言葉遣いは私が確信しているほど怖いです。 100から104に5 idsを割り当てて、CONTENTIONが返ってくると、これは私がコピーしたエンティティが将来、自動IDで新しいエンティティで上書きされる可能性があるようです。しかし、私が急いで、自分のエンティティを100,101,102,103、および104に手動で設定して書くと、私は安全になり、自動ID付きの新しいエンティティはこれらのIDを受け取らないでしょう。

これがどのように機能するのか分かりませんので心配です。私はidアロケータが書かれているものに注意を払っているとは思わない。

TL; DR

次のシナリオを想像:

allocateIdRange(100, 104); // returns CONTENTION 
putEntityWithManualId(100); 
putEntityWithManualId(101); 
putEntityWithManualId(102); 
putEntityWithManualId(103); 
putEntityWithManualId(104); 
// all puts succeed 

今、後、私は

putNewEntityWithAutomaticId(); 

呼び出すときに、自動IDは100であろうと、任意の危険性があります、 101,102,103,104のいずれかであるか?

答えて

0

ドキュメントは怒鳴るよう、以下:

範囲が人口になるともはや競合が存在しますので、データストアの自動IDアロケータは、既存のエンティティを上書きする新しいエンティティのキ​​ーを割り当てていないではないだろう。

したがって、新しくコピーされたエンティティが上書きされる心配はありません。

関連する問題