2010-08-27 6 views
9

Ich wollte GAE Leseleistung benchmarken. Etwa 10.000 Entitäten werden aus dem Datenspeicher geholt. Diese Entitäten enthalten 3 Eigenschaften Name (ca. 16 Zeichen), Beschreibung (ca. 130 Zeichen) und einen Zeitstempel. Nichts ungewöhnlich groß.Ist die CPU-Bandbreite bei Google App Engine einfach zu teuer oder ist es mein Code?

Hier ist, was ich sehe:

Im Durchschnitt dauert es etwa 11 Sekunden 10k Einheiten zu lesen. Nicht sicher, ob dies als schnell, langsam oder sinnvoll angesehen wird, aber es ist nicht so aufregend.

Interessanter finden Sie die CPU-Messung. Die 100-malige Ausführung dieser Leseoperation verbraucht ungefähr 3,0 CPU-Stunden. Die Kosten betragen 0,30 US-Dollar.

Da es hier keinen CPU-intensiven Algorithmus gibt, macht es die CPU-Bandbreite von GAE nicht ziemlich teuer? (Sicher, es kommt mit 24/7 sys-admins in Form von Python-Skripten etc etc, aber immer noch ...)

Oder ist das etwas in meinem Java-Code:

http://github.com/akirekadu/GAE-Evaluation/blob/master/show.jsp

+0

Das klingt für mich nicht unvernünftig, 1000 Entitätsobjekte pro Sekunde über das Internet ... Ein kurzer Test, der 3500 Entitäten (die jeweils etwas mehr Daten als Ihr Beispiel enthielten) über das Internet dauerte etwa drei Sekunden. Haben Sie eine Vorstellung davon, wie viele Daten übertragen werden? – darri

+0

@darri, "Datenspeicher" ist eine interne GAE-Einrichtung –

+0

(a) Die Zeit, die ich erwähnt habe, * beinhaltet nicht die Web-Round-Trip. Es ist Zeit, Entitäten zu lesen (und den HTML-Code zu konstruieren). (b) Die abgerufenen Daten sind ungefähr 3 MB. – akirekadu

Antwort

5

Es ist Nicht dein Code, ich glaube dein Ergebnis. In unseren eigenen Experimenten haben wir herausgefunden, dass das Retrieval und (insbesondere) das Speichern sehr kostspielige Operationen in Bezug auf die CPU-Quote sind.

Wir haben festgestellt, dass:

  • Indizes teuer sind. Wenn Sie mehr schreiben als lesen, seien Sie mit Ihren Indexen geizig. Stellen Sie sicher, dass Sie das Attribut indexed=False für Modelleigenschaften kennen und achten Sie genau darauf, was in index.yaml automatisch generiert wird.

  • Wenn Sie mehr lesen als Sie schreiben, können viele Multi-Indizes sinnvoll sein. Verwenden Sie Memcache, wo Sie können. Verwenden Sie Entitätsgruppen, wenn sie sinnvoll sind.

  • Die App-Engine-API bietet Ihnen Tools zur Verbesserung der Effizienz. Sie sind sehr wichtig. Wenn Sie 100 Zeilen schreiben, reduziert die Verwendung eines einzelnen Massen-puts() vs. 100 einzelnen put() -Aufrufen die CPU-Nutzung erheblich.

Wenn Ihre App groß häufig durchführen wird liest, wie Sie beschrieben haben, möchten Sie vielleicht eine andere Lösung (zum Beispiel ein VPS wie Slicehost oder Linode) oder ein anderes Datenmodell wählen. Jede App wird unterschiedliche Bedürfnisse haben, WRT-Disk, CPU, Speicher, usw., so dass ich die zurückliegenden Umschlagsberechnungen als eine Übung für den Leser belasse.

HTH!

Verwandte Themen