2011-02-18 7 views
8

¿Cuál sería la mejor (es decir, la forma más eficiente) de contar el número de objetos devueltos por una consulta, sin cargarlos en realidad, usando Objectify en AppEngine? Supongo que el mejor es ir a buscar todas las llaves y contando el resultado:Objectify/AppEngine: ¿la mejor manera de contar # de objetos devueltos por una consulta?

public int getEntityCount(Long v) { 
    Objectify ofy = ObjectifyService.begin(); 
    Iterable<Key<MyEntity>> list = ofy.query(MyEntity.class) 
      .filter("field", v).fetchKeys(); 
    int n = 0; 
    for (Key<MyEntity> e : list) 
     n++; 
    return n; 
} 

¿No parece tener ningún método específico para hacerlo. ¿Algunas ideas?

Respuesta

14

lo encontró:

int n = Iterable<Key<MyEntity>> list = ofy().query(MyEntity.class) 
     .filter("field", v).count(); 

Es así de simple, aunque eficaz, ya que recupera todas las claves. Es mejor diseñar su interfaz de usuario para manejar números desconocidos de resultados (como Google que da pistas sobre el número de páginas pero no el número real)

+2

Tenga en cuenta que contar entidades siempre es ineficiente - O (n) tiempo. Si espera que haya mucho, debe mantener un recuento persistente en su lugar. –

+0

De alguna manera ineficiente, pero al menos no capta entidades, solo claves, ¿verdad? En mi caso, puede haber muchos objetos "MyEntity", pero el recuento de filtros nunca es tan grande (<100). –

+1

¿Este enfoque no tiene un problema con la cantidad de elementos que se obtienen al mismo tiempo? He intentado un enfoque similar, pero finalmente no funcionó, ya que el recuento máximo fue de 1000 (servidor de desarrollo). – petr

Cuestiones relacionadas