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?
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.
Tags und Links database google-app-engine