7 Stimmen

Verbesserung der App-Engine-Leistung durch Reduzierung der Entitätsgröße

Ziel ist es, die CPU-Kosten und die Antwortzeit für einen Code zu verringern, der sehr häufig ausgeführt wird und jedes Mal mehrere hundert Schlüssel mit db.get() abrufen muss.

Kann das überhaupt funktionieren?

Kann ich erwarten, dass die API-Zeit einer db.get() mit mehreren hundert Schlüsseln ungefähr linear abnimmt, wenn ich die Größe der Entität reduziere? Derzeit hat die Entität die folgenden Daten angehängt: 9 String, 9 Boolean, 8 Integer, 1 GeoPt, 2 DateTime, 1 Text (durchschnittliche Größe ~100 Bytes FWIW), 1 Referenz, 1 StringList (durchschnittliche Größe 500 Bytes). Das Ziel ist es die überwiegende Mehrheit dieser Daten in verwandte Klassen zu verschieben, so dass der Kern holen des Hauptmodells schnell sein wird.

Wenn es funktioniert, wie wird es umgesetzt?

Werde ich nach einem Refactor immer noch die gleichen hohe Kosten für das Abrufen vorhandener Entitäten? In der Dokumentation steht, dass alle Eigenschaften eines Modells gleichzeitig abgerufen werden. Wird die alte nicht benötigten Eigenschaften weiterhin über RPC auf meine Kosten übertragen, während warten? Mit anderen Worten: Wenn ich die Ladezeit meiner Entitäten verringern möchte, ist es ist es notwendig, die alten Entitäten in solche mit der neuen Definition zu migrieren? Wenn ja, reicht es aus, die Entität erneut einzugeben(), oder muss I unter einem völlig neuen Schlüssel speichern?

Beispiel

Bedenken Sie:

class Thing(db.Model):
    text    = db.TextProperty()
    strings = db.StringListProperty()
    num     = db.IntegerProperty()

thing = Thing(key_name='thing1', text='x' * 10240,
      strings = ['y'*500 for i in range(10)], num=23)
thing.put()

Nehmen wir an, ich definiere Thing neu, um es zu vereinfachen, und bringe eine neue Version heraus:

class Thing(db.Model):
    num = db.IntegerProperty()

Und ich hole sie wieder ab:

thing_again = Thing.get_by_key_name('thing1')

Habe ich die Abrufzeit für diese Entität reduziert?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X