2010-06-07 6 views

Antwort

14

Mit der Datastore Statistics können Sie effizient alle Entitäten einer bestimmten Art (d. H. Die Anzahl der Zeilen in einer Tabelle) zählen. Einfaches Beispiel:

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

Sie ein detaillierteres Beispiel finden können, wie die neuesten Statistiken erhalten here (GAE mehrere Kopien der Statistiken halten kann - eine für 5min vor, eine für 30min vor, etc.).

Beachten Sie, dass diese Statistiken nicht ständig aktualisiert werden, so dass sie ein wenig hinter den tatsächlichen Zählwerten liegen. Wenn Sie wirklich die tatsächliche Anzahl benötigen, können Sie die Anzahl in Ihrer eigenen benutzerdefinierten Statistik-Tabelle nachverfolgen und sie jedes Mal aktualisieren, wenn Sie eine Entität erstellen/löschen (obwohl dies ein wenig teurer ist).

Aktualisierung 03-08-2015: Die Verwendung des Datenspeichers kann zu veralteten Ergebnissen führen. Wenn das keine Option ist, behalten zwei andere Methoden einen Zähler oder einen Zähler. (You can read more about those here). Sehen Sie sich diese 2 nur an, wenn Sie Echtzeitergebnisse benötigen.

7

Es gibt kein Konzept von "Select count (*)" in App Engine. Sie müssen einen der folgenden Schritte ausführen:

  1. Führen Sie einen "keys-only" (Index-Traversal) der Entitäten durch, die Sie zur Abfragezeit benötigen, und zählen Sie sie nacheinander. Dies hat die Kosten langsamer Lesevorgänge.
  2. Das Update zählt beim Schreiben - dies hat den Vorteil extrem schneller Lesevorgänge bei höheren Kosten pro Schreibvorgang/Update. Kosten: Sie müssen wissen, was Sie im Voraus zählen möchten. Sie zahlen eine höhere Kosten zum Zeitpunkt des Schreibens.
  3. Aktualisieren Sie alle Werte asynchron mithilfe von Aufgabenwarteschlangen, Cron-Jobs oder dem neuen Mapper API. Dies hat den Nachteil, dass es halb frisch ist.
+0

+1 Dies alles sind gute Alternativen, die besser geeignet sein könnten, dass die Datenspeicher-Statistiken API je nach den Bedürfnissen der Anwendung. –

3

Sie können nicht zählen. die Zeilen in Google App Engine com.google.appengine.api.datastore.Query wie folgt:

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