Una de las mejores cosas que las bases de datos relacionales soportan son las funciones agregadas como count, sum, avg, etc. Pero parece que si estás usando GAE, al insertar o actualizar un registro debes calcular y almacenar el conteo, suma, media, etc. valores de toda la tabla. Pero, ¿y si tienes muchas agrupaciones condicionales? Dada una persona:¿Hay alguna forma de agregar funciones en Google App Engine?
class Person {
@Id
Integer age;
String city;
}
Si quiero
- el número total de personas y
- la edad media
¿Es cierto que cada vez que crear, actualizar o borrar una persona también debería calcular ambos agregados y almacenarlos como columnas separadas en la misma tabla. Si también quiero los valores totales y medios por ciudad, ¿debo guardar estos valores para cada ciudad también como columnas separadas en la misma tabla?
Esto suena increíblemente caro, tanto en tiempos de desarrollo de software como en cargas de CPU. Tengo que pensar que Google se acerca al almacén de datos de esta manera por una buena razón, pero mi reacción inicial es de horror. Alex, ¿cuál es un buen libro de buenas prácticas o un documento al que recomendarías tipos como SQL pesado? –
Excelente pregunta, y me complace ver que elegí un buen enfoque creando un tipo solo para la agregación. Sin embargo, como dice @JD, implementar esta agregación puede ser costoso y propenso a errores. No he encontrado una propiedad para esto (algo así como 'totalAge = db.AggregateProperty (of = Person.age)'. ¿Cuál crees que es el mejor enfoque? – rds
Acabo de encontrar http://code.google.com/ appengine/articles/sharding_counters.html – rds