2010-06-07 14 views

Répondre

14

Vous pouvez obtenir efficacement le nombre de toutes les entités d'un type particulier (c'est-à-dire, le nombre de lignes dans une table) en utilisant le Datastore Statistics. Exemple simple:

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

Vous pouvez trouver un exemple plus détaillé de la façon d'obtenir les dernières statistiques here (GAE peut conserver plusieurs copies des statistiques - un pour il y a 5 minutes, un pour il y a 30 minutes, etc.).

Notez que ces statistiques ne sont pas constamment mis à jour de sorte qu'ils lag un peu derrière les comptes réels. Si vous avez vraiment besoin du nombre réel, vous pouvez suivre les comptes dans votre propre tableau de statistiques personnalisées et le mettre à jour chaque fois que vous créez/supprimez une entité (bien que ce soit un peu plus cher à faire).

Mise à jour du 03-08-2015: L'utilisation du magasin de données peut entraîner des résultats périmés. Si ce n'est pas une option, deux autres méthodes conservent un compteur ou des compteurs de sharding. (You can read more about those here). Ne regardez que ces 2 si vous avez besoin de résultats en temps réel.

7

Il n'y a pas de concept de "Select count (*)" dans App Engine. Vous devrez effectuer l'une des opérations suivantes:

  1. Procédez à un "passage de l'index" uniquement pour les entités souhaitées lors de l'interrogation et comptez-les une par une. Cela a le coût des lectures lentes. La mise à jour compte au moment de l'écriture - ceci a l'avantage de lire extrêmement rapidement à un coût plus élevé par écriture/mise à jour. Coût: vous devez savoir ce que vous voulez compter à l'avance. Vous paierez un coût plus élevé au moment de l'écriture.
  2. Mise à jour tous les comptes de manière asynchrone à l'aide Queues tâches, tâches cron ou le nouveau Mapper API. Cela a le compromis d'être semi-frais.
+0

+1 Ce sont toutes les grandes solutions de rechange qui pourraient être plus approprié que l'API statistiques datastore en fonction des besoins de votre application. –

3

Vous pouvez compter pas. de lignes dans Google App Engine à l'aide com.google.appengine.api.datastore.Query comme suit:

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