Was ist die AppEngine-Datenbank "Kaltstartzeit"?

8

Eine der häufigsten Beschwerden, die ich über die AppEngine-Datenbank (für Java) gelesen habe, ist, dass es extrem langsam ist, wenn es zur "Kaltstartzeit" kommt. Was bedeutet das? Und sollte ich mir Sorgen machen?

    
Issumanual 03.05.2010, 09:21
quelle

1 Antwort

10

Es ist etwas, worüber Sie sich Sorgen machen sollten.

Google App Engine startet eine neue JVM, um Anfragen zu bearbeiten, wenn Ihre App für einen bestimmten Zeitraum keine Anfragen erhalten hat. Die Handhabung des Datenspeichers von "kalt" - d. H. Zum ersten Mal in einer JVM - kann eine beträchtliche Zeit beanspruchen, bis zu 5+ Sekunden.

Nachdem Sie den Datenspeicher verwaltet haben (normalerweise eine Instanz von PersistenceManager ), ist alles in Ordnung (für die Lebensdauer der JVM!).

BEARBEITEN:

Auch eine frische JVM in GAE-Java ist langsam. Lesen Sie Ссылка und Sie werden sehen, dass sie eine Singleton-Klasse für die Verfügbarkeit von% verwenden. co_de%, wie sie die Operation der Instantiierung eines als "teuer" beschreiben.

Du könntest es selbst ausprobieren. Erstellen Sie eine neue Anwendung auf GAE-Java, die nur "Hello World!" und Sie werden feststellen, dass die erste Anfrage an die Anwendung eine Anzahl von Sekunden dauert.

Fügen Sie eine Anfrage für PersistenceManagerFactory hinzu und Sie werden feststellen, dass die erste Anfrage ein paar Sekunden mehr dauert.

BEARBEITEN BEARBEITEN:

Ich habe diesen Test jetzt für Ihr Sehvergnügen erstellt:

Ссылка

Sie werden entweder sofort "Hello, world 0" oder "Hello, world xxxx" sehen, wobei xxxx eine Zahl in MS angibt, wie lange es gedauert hat, um den Datenspeicher zu handhaben. Ich denke, dass die Komplexität und Anzahl der Indizes im Datenspeicher sich darauf auswirken kann, wie lange es dauert, den Datenspeicher zu verwalten, da er in dieser App schneller ist als in einigen meiner anderen Apps.

PMF ist eine exakte Kopie des in den App-Engine-Dokumenten bereitgestellten.

%Vor%

BEARBEITEN BEARBEITEN BEARBEITEN:

Ich habe meinen Code so geändert, dass er bei jeder Anfrage ein PersistenceManagerFactory instanziiert und jetzt 500 Serverfehler und in den Protokollen:

  

javax.jdo.JDOFatalUserException:   Anwendungscode wurde versucht, ein   PersistenceManagerFactory mit dem Namen   Transaktionen optional, aber eins mit   Dieser Name existiert bereits! Instanzen   von PersistenceManagerFactory sind   extrem langsam zu erstellen und es ist   normalerweise nicht notwendig, um eins zu schaffen   mit einem bestimmten Namen mehr als einmal.   Erstellen Sie stattdessen ein Singleton und teilen Sie es   es in Ihrem Code. Wenn du   muss wirklich ein Duplikat erstellen   PersistenceManagerFactory (z. B. für   eine unitest Suite), stellen Sie die   appengine.orm.disable.duplicate.pmf.exception   Systemeigenschaft, um diesen Fehler zu vermeiden.

Ich glaube nicht, dass ich noch einen Beweis dafür liefern muss, dass der Datenspeicher in der App engine SLOW ist.

    
Finbarr 03.05.2010, 09:23
quelle

Tags und Links