Google App Engine exzessive kleine Datenspeichervorgänge

7

Ich habe Probleme mit dem Google Store-Datenspeicher für Google Apps. Seit der Einführung des neuen Preismodells haben sich die Kosten für den Betrieb meiner App massiv erhöht.

Der Übeltäter scheint "Datastore small operations" zu sein, die bei mehr als 20 Millionen Operationen pro Tag landen!

Hat jemand dieses Problem, denke ich nicht, dass ich eine übermäßige Menge an Schlüsselsuchen betreibe, und ich habe nur 5000 Benutzer mit ungefähr 10 - 20 Anfragen pro Minute.

Vielen Dank im Voraus!

Bearbeiten

Ok, ich habe ein paar Werte, diese sind nach ungefähr 3 Stunden. Hier sehen Sie, was ich in meinem Dashboard im Bereich Abrechnung sehe:

Und hier sind einige der Statistiken:

Offensichtlich gibt es viele Aufrufe von datastore.get. Ich fange an zu denken, dass es mein Entwurf ist, der das Problem verursacht. Diese erhalten Konten. Jeder Benutzer hat einen Account, aber ein Account kann einen von zwei Typen haben, dazu verwende ich Composition. Daher hat jede Kontoeinheit eine Verknüpfung zu ihrer Unterkontenentität. Wenn ich nach Benutzern in der Nähe suche, muss ich die Accounts abrufen, die die Abfrage verwenden, und dann ein Get für jedes Konto erstellen, um das Subkonto zu erhalten. Die Top-Anfrage im stats-Bild ist ein Aufruf, der 100 Accounts bekommt und dann einen get auf jeden einzelnen bekommt. Ich hätte gedacht, dass dies eine sehr leichte Frage war, aber ich denke nicht. Und ich bin immer noch verwirrt über die Anzahl der kleinen Datenspeicher, die in meinem Dashboard gespeichert sind.

    
Theblacknight 11.11.2011, 19:23
quelle

4 Antworten

11

Verwenden Sie Appstats auf jeden Fall, wie Drew es vorschlägt; Unabhängig davon, welche Bibliothek Sie verwenden, erfahren Sie, welche Operationen Ihre Handler ausführen. Am wahrscheinlichsten sind nur Schlüssel-Abfragen und Zähloperationen.

    
Nick Johnson 12.11.2011, 09:35
quelle
9

Mein Rat wäre, AppStats ( Python / Java ), um Ihren Traffic zu profilieren und herauszufinden, welcher Handler die meisten Datenspeicher-Ops generiert. Wenn Sie den Code hier veröffentlichen, können wir möglicherweise Optimierungen vorschlagen.

    
Drew Sears 11.11.2011 20:09
quelle
1

Durchsuchen Sie Ihren Datenspeicher nicht, verwenden Sie get (key) oder get_by_id (id) oder get_by_key_name (Schlüsselname) so oft Sie können.

    
GAE-Web 12.11.2011 03:06
quelle
1

Haben Sie viele ReferenceProperty-Eigenschaften in Ihren Modellen? Wenn Sie auf sie zugreifen, wird db.get für jede Eigenschaft ausgelöst, sofern Sie sie nicht vorab abrufen. Dies würde 101 db.get-Anfragen auslösen.

%Vor%     
Teemu Ikonen 12.11.2011 20:05
quelle