6

クエリでエンティティの子を使用できますか?

与えられた:

class Factory(db.Model):
    """ Parent-kind """
    name = db.StringProperty()

class Product(db.Model):
    """ Child kind, use Product(parent=factory) to make """
    @property
    def factory(self):
        return self.parent()
    serial = db.IntegerProperty()

500 の工場が 500 個の製品を製造し、合計 250,000 個の製品があるとします。特定の 1 つの工場で製造された 500 個の製品だけを返すリソース効率の高いクエリを作成する方法はありますか? 祖先メソッドはフィルターであるため、たとえば Product.all().ancestor(factory_1) を使用すると、データストアを繰り返し呼び出す必要があります。

4

1 に答える 1

8

先祖は「フィルター」として説明されていますが、実際にはクエリを更新して祖先条件を追加するだけです。クエリを反復処理するまでデータストアにリクエストを送信しないので、問題なく動作します。

ただし、小さな点が 1 つあります。同じ親を持つエンティティが 500 個あると、スケーラビリティが損なわれる可能性があります。これは、書き込みがエンティティ グループのメンバーに対してシリアル化されるためです。製品を製造した工場を追跡したいだけの場合は、ReferenceProperty を使用します。

class Product(db.Model):
   factory = db.ReferenceProperty(Factory, collection_name="products")

次に、次を使用してすべての製品を取得できます。

myFactory.products
于 2009-02-13T10:43:02.233 に答える