0

私はこのようなモデルを持っています:

class Person(db.Model):
     ...
     zipcode = db.StringProperty()

class Book(db.Model):
     owner = db.ReferenceProperty(Person)
     date_created = db.DateTimeProperty(auto_add=True)

date_created降順でソートされた特定の郵便番号内のすべての本のリストを取得するにはどうすればよいですか?

4

2 に答える 2

1

Greg の回答をさらに一歩進めると、App Engine のデータストアで正しいことは、非正規化することです。

class Person(db.Model):
     ...
     zipcode = db.StringProperty()

class Book(db.Model):
     owner = db.ReferenceProperty(Person)
     date_created = db.DateTimeProperty(auto_add=True)
     zipcode = db.StringProperty()

所有者を設定するときは、本の郵便番号を慎重に設定する必要があります。その後、必要なクエリを単一のクエリとして実行するのは非常に簡単です。マージを行うためだけに複数のクエリを実行し、多くのエンティティをフェッチする必要があるため、グレッグのソリューションはよりコストがかかります。大規模なデータセットでは速度も低下し、さまざまなフェッチ操作がタイムアウトしたり、マージ操作に長い時間と多くのメモリがかかるリスクがあります。

于 2013-09-25T19:20:56.387 に答える
0

探している郵便番号を持つすべての Person エンティティに対してクエリを実行し、各書籍を検索してリストをマージし、結果を並べ替える必要があります。

一般に、リレーショナル データベースで行うような正規化は、データストアで物事をモデル化する最良の方法ではありません。

于 2013-09-25T18:32:53.630 に答える