5

Ich verwende den App Engine-Massenlader (Python-Laufzeit), um Entitäten in den Datenspeicher hochzuladen. Die Daten, die ich hochlade, sind in einem proprietären Format gespeichert, so dass ich es durch einen eigenen Connector implementiert habe (registriert in bulkload_config.py), um es in das Python-Zwischenwörterbuch zu konvertieren.App Engine Bulk Loader-Leistung

import google.appengine.ext.bulkload import connector_interface 
class MyCustomConnector(connector_interface.ConnectorInterface): 
    .... 
    #Overridden method 
    def generate_import_record(self, filename, bulkload_state=None): 
     .... 
     yeild my_custom_dict 

Um diesen neutralen Python-Wörterbuch in eine Datenspeicherentität zu konvertieren, verwende ich eine Importfunktion benutzerdefinierte Post, die ich in meinem YAML definiert habe.

def feature_post_import(input_dict, entity_instance, bulkload_state): 
    .... 
    return [all_entities_to_put] 

Hinweis: Ich bin nicht entity_instance, bulkload_state in meiner feature_post_import Funktion. Ich erstelle gerade neue Datenspeichereinheiten (basierend auf meiner input_dict) und gebe sie zurück.

Jetzt funktioniert alles super. Der Prozess des Massenladens von Daten scheint jedoch zu viel Zeit zu beanspruchen. Für z.B. Eine GB (~ 1.000.000 Einheiten) Daten dauert ~ 20 Stunden. Wie kann ich die Leistung des Massenladeprozesses verbessern? Fehle ich etwas?

Einige der Parameter, die ich mit appcfg.py verwende, sind (10 Threads mit einer Batchgröße von 10 Entitäten pro Thread).

eine Google App Engine Python Gruppe Beitrag verlinkte: http://groups.google.com/group/google-appengine-python/browse_thread/thread/4c8def071a86c840

Update: die Leistung des Bulk Load Prozess zu testen, ich entities eines 'Test' Kind geladen. Obwohl diese entity eine sehr einfache FloatProperty hat, brauchte ich immer noch die gleiche Menge an Zeit, um diese entities zu laden.

Ich versuche, werde noch die Bulk Loader Parameter zu variieren, rps_limit, bandwidth_limit und http_limit, um zu sehen, ob ich noch mehr Durchsatz bekommen.

+0

Wenn die Frage etwas verwirrend ist, oder etwas, das ich hinzufügen muss, lassen Sie es mich wissen. – Rahul

Antwort

4

Es gibt einen Parameter namens rps_limit, der die Anzahl der Einheiten bestimmt, die pro Sekunde hochgeladen werden sollen. Dies war der größte Engpass. Der Standardwert hierfür ist 20.

Auch erhöhen Sie die bandwidth_limit zu etwas Vernünftigem.

Ich erhöhte rps_limit zu 500 und alles verbessert. Ich erreichte 5,5 - 6 Sekunden pro 1000 Einheiten, was eine wesentliche Verbesserung gegenüber 50 Sekunden pro 1000 Einheiten darstellt.