0

私は多対多の関係を持つアプリケーションを構築しています。エンティティ「画像」のアイテムは、任意の数のギャラリー(「ギャラリー」)にリンクできます。そしてもちろん、ギャラリーは任意の数の写真を保持できます。

したがって、ここでのGoogleの提案に従って、「Gallery」の外部キーを保持する「Picture」のリストを使用します。これはBigTableのアプローチです。

(古いスタイルのリレーショナルDBアプローチでは、「Picture」と「Gallery」の間にテーブル/エンティティを配置します。)

これが私の質問です:キーを保存するとき、「画像」の「StringListProperty」に行くべきですか、それとも「ListProperty(db.Key)」の方がうまくいくでしょうか?

StringListに見られる理由の1つは、Keys以外の値も格納できるということですが、一方で、それはとにかくダーティなスタイルになります。しかし、インデックスが爆発するため、Googleがエンティティで複数のリストを使用しないことを提案したこともかなり確信しています。だから、これは私を裏口に保つでしょう。

タイプが「Key 」のListPropertyの場合、値が実際にKeyである場合、1つのポイントは自動検証になります。

文字列をキーに、またはその逆に変換するのは非常に簡単なので、ここでリストタイプの1つを好む理由はわかりません。

パフォーマンスの問題に関しては、これをどのようにテストできるかわかりませんが、これがこの決定の主な要因になるようです。

あなたの入力に興味があります。特に誰かがこれでパフォーマンスをテストしたか、とても親切でそれをするなら。

乾杯、//ハンネス

4

2 に答える 2

0

db.ListProperty(db.Key)キーのリストを保存する場合は、を使用します。これらはバイナリ表現で格納されます。これは、文字列リストで使用する文字列表現よりもコンパクトです。

リスト内の他のオブジェクトとキーを混在させるのは面倒です。同じカスタムインデックスで複数のリストにインデックスを付けない限り、エンティティに複数のリストを含めることは問題ありません。これが、インデックスの爆発的な原因になります。

于 2011-01-12T23:03:17.677 に答える
0

db.ListProperty(db.Key)を使用します。これにより、文字列よりもデータのフェッチが簡単になります。ギャラリーモデルに、画像のキーのリストを含むタイプdb.ListProperty(db.Key)のpic_listがプロパティに含まれている場合エンティティ..Pictureがエンティティの名前であるとします。..次に、Picture.get(// GalleryObject //。pic_list)がすべての画像エンティティを取得します。

于 2011-01-20T04:40:41.070 に答える