Uno dei vantaggi del supporto dei database relazionali sono le funzioni di aggregazione come count, sum, avg ecc. Ma sembra che se si sta utilizzando GAE, quando si inserisce o si aggiorna un record è necessario calcolare e memorizzare il conteggio, somma, avg, ecc. valori dell'intera tabella. Ma cosa succede se hai molti raggruppamenti condizionali? Data una Persona:C'è un modo per fare funzioni di aggregazione su Google App Engine?
class Person {
@Id
Integer age;
String city;
}
Se voglio
- il numero totale delle persone e
- l'età media
È vero che ogni volta che creo, aggiornare o cancellare una persona dovrei anche calcolare entrambi gli aggregati e memorizzarli come colonne separate nella stessa tabella. Se voglio anche i valori totali e medi per città, dovrei memorizzare questi valori per ogni città anche come colonne separate nella stessa tabella?
Questo sembra incredibilmente costoso, sia nei tempi di sviluppo del software che nelle spese della CPU. Devo pensare che Google si avvicini al datastore in questo modo per una buona ragione, ma la mia reazione iniziale è di orrore. Alex, qual è il miglior libro o documento di buone pratiche a cui faresti riferimento ragazzi come me? –
Ottima domanda, e sono felice di vedere che ho scelto un buon approache creando un tipo solo per l'aggregazione. Tuttavia, come dice @JD, l'installazione di questa aggregazione può essere costosa e soggetta a errori. Non ho trovato una proprietà per questo (qualcosa come 'totalAge = db.AggregateProperty (of = Person.age)'. Quale pensi che sia l'approccio migliore? – rds
Ho appena trovato http://code.google.com/ appengine/articoli/sharding_counters.html – rds