おそらく数百万以上のエントリを持つMOdelAと、おそらくデータストアに300000個以上のエントリを持つModelBを持っています。AppEngineデータストアの2つの巨大コレクション間の関係をマップする方法
私は(1周り - 100秒)MODELAのために、主に新しいエントリを作成しますMODELAの各エンティティは、私はすべてを照会できるようにする必要がありますModelB
によって記述のいずれかのカテゴリに属しますModelBエンティティの1つに属するModelAエンティティ(作成時にソート)。
私の問題は、関係をマップする方法がわかりません。私は気をつけません。道を進むと、ModelAが属しているかもしれないMOdelCがあるので、親を使うだけです。
AppEngineでマップする方法はありますか?
通常のSQLデータベースでは、ModelAをModelBにマッピングし、後でModelAをModelCにマッピングする別のピボットテーブルにピボットテーブルを作成します。それからピボットテーブルに問い合わせて、例えばModelB id 5と言うことができるすべてのModelAsを教えてください。
ありがとうございました!
UPDATE:
私は私の問題を説明するための最良の方法は、私が何をしようとしている例になると思います。
メッセージとシティエンティティがあるとします。各メッセージは市についてのユーザーによって投稿されます(これらは私のModelAとModelBです)。これで、ユーザーは好きなだけ多くの都市を自分の好きな場所に追加できます。
私は、自分がお気に入りに持つ都市(日付でソートされた都市)についてユーザーにメッセージが表示されるようにデータモデルを設計する必要があります。したがって、Sean Fujiwaraが提案した例はうまくいかないでしょう。
私はこのような何かを照会しなければならないでしょう:
db.GqlQuery("SELECT * FROM Message WHERE city IN (1, 2, 3, 4, ....)
これを都市お気に入りに追加の利用者が多くを持っている可能性があるため、拡張することはできません。 AppEngineのドキュメントでは、
を含む単一のクエリは、30個以下のサブクエリに限定されています。クエリで
と各IN(...)にそれぞれの条件に対して複数の==クエリを生成
は、任意の提案をありがとう!
非常に興味深いの読み取りは、どうもありがとうございました。残念ながら、私の問題は解決しません。私の質問への更新を見てください。ありがとう! – Ralphz
私はあなたがUser.favoriteCities [City.key、City.key ...]のようなキーのリストを保存しなければならないかもしれないと思う。次に、一度に30都市のメッセージのクエリを実行する必要があります。これは制限ですが、何らかの形でdbに複数の非同期要求を実行して速度を上げることができます。 – aglassman