2010-06-07 24 views

Respuesta

14

Puede obtener de manera eficiente un recuento de todas las entidades de un tipo particular (es decir, el número de filas en una tabla) utilizando el Datastore Statistics. Un simple ejemplo:

from google.appengine.ext.db import stats 
kind_stats = stats.KindStat().all().filter("kind_name =", "NameOfYourModel").get() 
count = kind_stats.count 

Puede encontrar un ejemplo más detallado de cómo obtener las últimas estadísticas here (GAE pueden mantener múltiples copias de las estadísticas - uno para atrás 5min, uno para atrás 30min, etc.).

Tenga en cuenta que estas estadísticas no se actualizan constantemente, por lo que van un poco por detrás de los recuentos reales. Si realmente necesita el recuento real, puede realizar un seguimiento de los recuentos en su propia tabla de estadísticas personalizadas y actualizarlo cada vez que cree/elimine una entidad (aunque esto será bastante más costoso).

Actualización 03-08-2015: El uso de las estadísticas del almacén de datos puede generar resultados obsoletos. Si eso no es una opción, otros dos métodos mantienen un contador o contadores de sharding. (You can read more about those here). Solo mira estos 2 si necesitas resultados en tiempo real.

7

No existe el concepto de "Seleccionar recuento (*)" en App Engine. Tendrá que hacer una de las siguientes cosas:

  1. Realice un "intercambio de claves" (index throughversal) de las entidades que desee en el momento de la consulta y cuéntelas una por una. Esto tiene el costo de lecturas lentas.
  2. La actualización cuenta al tiempo de escritura, esto tiene el beneficio de lecturas extremadamente rápidas a un mayor costo por escritura/actualización. Costo: tiene que saber lo que quiere contar con anticipación. Pagará un costo mayor al momento de escribir.
  3. Actualice todos los recuentos de forma asincrónica utilizando Task Queues, cron jobs o el nuevo Mapper API. Esto tiene el compromiso de ser semi-fresco.
+0

+1 Estas son todas las grandes alternativas que podría ser más apropiado que la API de estadísticas del almacén de datos en función de las necesidades de su solicitud. –

3

Usted puede contar no. de filas en Google App Engine utilizando com.google.appengine.api.datastore.Query de la siguiente manera:

int count; 
    Query qry=new Query("EmpEntity"); 
    DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService(); 
    count=datastoreService.prepare(qry).countEntities(FetchOptions.Builder.withDefaults()); 
Cuestiones relacionadas