Google App Engine Query (Non filtrare) per i bambini di un'entità

voti
6

Sono i figli di un'entità disponibili in una query?

Dato:

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

Assumere 500 fabbriche hanno fatto 500 prodotti per un totale di 250.000 prodotti. C'è un modo per formare una query efficiente delle risorse che restituirà solo i 500 prodotti realizzati da un particolare fabbrica? Il metodo antenato è un filtro, in modo da utilizzare ad esempio Product.all (). Antenato (Factory_1) richiederebbe ripetute chiamate l'archivio dati.

È pubblicato 09/02/2009 alle 16:36
fonte dall'utente
In altre lingue...                            


1 risposte

voti
8

Anche se antenato è descritto come un "filtro", è in realtà solo aggiorna la query per aggiungere la condizione antenato. Non si invia una richiesta al datastore fino eseguire iterazioni su query, quindi quello che hai funzionerà benissimo.

Un piccolo problema però: 500 entità con lo stesso genitore può far male la scalabilità, in quanto le scritture vengono serializzati ai membri di un gruppo di entità. Se si desidera solo per monitorare la fabbrica che ha fatto un prodotto, utilizzare un ReferenceProperty:

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

È quindi possibile ottenere tutti i prodotti utilizzando:

myFactory.products
Risposto il 13/02/2009 a 11:43
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more