Google app engine 实体子项的Google应用程序引擎查询(非筛选)

Google app engine 实体子项的Google应用程序引擎查询(非筛选),google-app-engine,gql,gqlquery,ancestor,Google App Engine,Gql,Gqlquery,Ancestor,实体的子项在查询中可用吗 鉴于: 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()

实体的子项在查询中可用吗

鉴于:

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种产品,总共生产了250000种产品。有没有一种方法可以形成一个资源高效的查询,只返回一个特定工厂生产的500种产品?祖先方法是一个筛选器,因此使用例如Product.all().祖先(factory_1)将需要重复调用数据存储。

虽然祖先被描述为“筛选器”,但它实际上只是更新查询以添加祖先条件。在对查询进行迭代之前,不会向数据存储发送请求,因此您所拥有的一切都可以正常工作

不过有一个小问题:具有相同父级的500个实体可能会影响可伸缩性,因为写入会序列化到实体组的成员。如果只想跟踪生产产品的工厂,请使用ReferenceProperty:

class Product(db.Model):
   factory = db.ReferenceProperty(Factory, collection_name="products")
然后,您可以通过以下方式获得所有产品:

myFactory.products

医生称之为过滤器,但它不是?看在上帝的份上,接下来怎么办。写操作的用例是每个工厂每天创建0到10个产品,产品之间的最小间隔时间为10秒(“突发”)。95%的产品读数为工厂整体读数。父子关系还是ReferenceProperty更好?我认为建议只使用事务中的实体组,因此ReferenceProperty更好,虽然可能没有太大的区别…但同一个实体组中的500个元素没有什么错-重要的是更新率。为什么要使用祖先查询而不是引用属性?我发现我自己想要检查一系列具有引用属性(相等筛选器)的实体上是否存在属性(不等筛选器!=null)。没有索引我就做不到!我可以搜索10万个实体。因此,添加一个祖先(而不是引用属性)可能会允许我在不使用额外索引的情况下执行该查询