2009-02-09 17 views
6

¿Los hijos de una entidad están disponibles en una consulta?Google App Engine Query (no filtro) para hijos de una entidad

dado:

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() 

Supongamos 500 fábricas han hecho 500 productos por un total de 250.000 productos. ¿Hay alguna manera de formar una consulta eficiente en cuanto a los recursos que devuelva solo los 500 productos fabricados por una fábrica en particular? El método ancestro es un filtro, por lo que se usan p. Product.all(). Ancestro (factory_1) requeriría llamadas repetidas al almacén de datos.

Respuesta

8

Aunque ancestro se describe como un "filtro", en realidad solo actualiza la consulta para agregar la condición ancestro. No envía una solicitud al almacén de datos hasta que itere sobre la consulta, por lo que lo que tiene funcionará bien.

Sin embargo, un punto menor: 500 entidades con el mismo elemento primario pueden perjudicar la escalabilidad, ya que las escrituras se serializan a los miembros de un grupo de entidades. Si lo que desea es realizar un seguimiento de la fábrica que fabrica un producto, utilice un ReferenceProperty:

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

entonces se puede obtener todos los productos mediante el uso de:

myFactory.products 
+0

Los documentos llaman un filtro, pero ISN ¿t? Misericordia, ¿qué sigue? El caso de uso para las escrituras es cada Fábrica crea cero a diez Productos/día con un tiempo mínimo entre productos de diez segundos ("ráfaga"). El 95% de las lecturas del Producto serán de fábrica como un todo. ¿El padre-hijo o ReferenceProperty es mejor? –

+0

Creo que la recomendación es usar grupos de entidades solo de transacciones, por lo que una propiedad de referencia sería mejor, aunque probablemente no haya una gran diferencia ... – mcobrien

+0

No hay nada de malo con 500 elementos en el mismo grupo de entidades: es la tasa de actualización eso cuenta. –