9

私はappengineに一意の制約を実装する方法について多くの記事と質問を見ましたが、実際にはについては何の説明も見つかりませんでした。なぜこの機能が存在しないのですかGoogle Appengineに固有の制約がないのはなぜですか?

appengineの開発者は、このような機能を実装しないほうがよいと思っていれば、彼らには良い理由があると信じていますが、なぜ彼らがそのように決めたのかを理解することに興味があります。

この決定はパフォーマンス上の問題に基づいて行われましたか?どうして?

これについての詳細な説明は非常に高く評価されます。

答えて

10

http://code.google.com/p/googleappengine/issues/detail?id=178#c14にリンクされているこの記事のように、データストアの分散された性質はユニークな制約を強制するのを困難にします。 2つのアプリケーションインスタンスが同時に固有のプロパティを持つエンティティを作成しようとすると、これを実行する唯一の方法はデータストア内のすべてのマシンで何らかの調整を必要とします。

それぞれ26名の人が、ペットのテーブルとその所有者の話をしているとします。それぞれの人は、アルファベットの異なる文字でペットをコントロールします。人1は文字Aで始まるすべてを行い、人2は文字Bで始まるすべてのことを行います。

データストア全体の唯一のミトンであることを確認したい場合は、ルーム内の1人の人だけが関与するため、これは簡単です。ミトンはまだそこにないことを確認してください。

所有者が一意でなければならないことを要求したい場合は、誰かがテーブルにエントリを書き込もうとするたびに、/他の誰かと/他の人がいないことを確認する必要がありますその所有者名が使用されました。これは、アプリケーションエンジンのデータストアがエンティティキー以外のものに対して一意性制約を許可しないという根本的な理由です。データストアに何千ものサーバーが含まれている場合は、これを実行できません。

この制限が存在する理由うまくいけば、あなたが見ることができ、そして、できれば私の深夜のタイピングが読みすぎて難しいことではありません:D

+0

は(良い例で)この偉大な答えをありがとう、私は今よりよく理解します! – MatToufoutu

3

issue list for GAEに一意の制約を追加すると、Googleからの回答が表示されます。

関連する問題