2012-08-25 6 views
9

Aus irgendeinem Grund hatte ich den Eindruck, dass das Schreiben einer vorhandenen Entität genauso teuer ist, wenn nicht mehr, als das Schreiben einer neuen Entität, auf die sich mein Code konzentriert hat Möglichkeiten, Entitäten in kleinere Entitäten zu zerlegen, sodass beim Ändern einer Eigenschaft weniger Schreibkosten entstehen. Allerdings betrachten jetzt die documentation, heißt es, dass eine bestehende Einheit gebe folgende Kosten hat:Vorhandene Entität in Google App Engine eingefügt

1 Schreib + 4 Schreibvorgänge pro modifizierte indizierte Eigenschaft Wert + 2 Schreibvorgänge pro modifizierten Verbundindexwert

Bevor ich die gesamte Struktur meines Codes ändere, möchte ich sicher sein, dass ich die Details verstehe. Was genau qualifiziert einen Index als "modifiziert"? Angenommen, ich habe 4 indizierte Zeichenfolgeneigenschaften und keine zusammengesetzten Indizes. Um dies als eine neue Einheit zu setzen, würden 10 Schreibvorgänge (2 + 2(indexed properties)) kosten. Angenommen, ich ändere jetzt eine dieser Zeichenfolgeneigenschaften und lege sie zurück. Würde das 5 Schreibkosten nur (1 + 4 per modified index) kosten? Fehle ich etwas? Gibt es irgendwelche Dinge, die ich berücksichtigen sollte?

Und was wäre, wenn ich 4 indizierte Eigenschaften und 1 nicht indexierte Eigenschaft hätte, und ich nur die nicht indizierte Eigenschaft modifizieren - das kostet mich nur 1 schreiben, um neu zu setzen?

+0

Ich würde das wieder aufheben, wenn ich könnte. – dragonx

+1

Auch das ist jetzt sehr einfach in SDK 1.7.1 zu testen, da AppStats Statistiken über die Kosten von Operationen gibt (muss aktiviert sein). Es wird Ihnen genau sagen, wie viele Schreibvorgänge jede Operation ausgeführt hat. Wirklich nützliche neue Funktion. –

Antwort

3

Alle Ihre Vermutungen sind richtig. Es hilft, wenn Sie wissen, wofür die Schreibvorgänge sind: Der 1 Schreibvorgang bezieht sich auf die Entität selbst; Die 2 Schreibvorgänge pro indizierte Eigenschaft auf create sind für die aufsteigenden und absteigenden einzelnen Eigenschaftsindizes für jede Eigenschaft, und die 4 Schreibvorgänge pro indizierte Eigenschaft bei Aktualisierung sollen den alten Wert löschen und den neuen Wert in diese aufsteigenden und absteigenden Indizes einfügen.

1

Ich habe gerade ein Experiment ausgeführt, bei dem ich ein Modell aktualisiert habe, das drei indexierte Eigenschaften (eine davon ist eine Liste) und vier nicht indizierte Eigenschaften aufweist.

Ich habe einen mapreduce run verwendet, um eine der nicht indizierten Eigenschaften und Put() die Entität zu aktualisieren.

Wenn ich meine Mathe richtig gemacht habe, habe ich überprüft, dass es nur 1 Schreibvorgang pro Entity dauerte, obwohl es 3 indizierte Eigenschaften (die nicht aktualisiert wurden).

(meine Mathe könnte ein bisschen zweifelhaft gewesen sein, da ich mapreduce verwendet habe, und mapreduce selbst eine Reihe von Datenspeicherung schreibt. Ich habe ein separates Experiment, um die # von mapreduce schreibt zu schätzen, so habe ich es berücksichtigt).