Memcache Quota Limit – 212 MB, 48 Stunden – Google Appengine

Der Google Appengine Memcache hat aktuell folgende Limits: maximal 212 MB Space, maximal 48 Stunden und 1 MB je Datensatz sowie maximal 10 K Datensätze. Langfristig können 500 KB zwischengespeichert werden.

Von Google selbst wird keine Quota für den Memcache veröffentlicht, sodass man die Werte nur durch eigene Tests ermitteln kann. Über die google.appengine.api kann mit memcache.get_stats()[‚bytes‘] die aktuelle Größe und mit memcache.get_stats()[‚oldest_item_age‘] der älteste Datensatz ermittelt werden.

Im Memcache können kurzfristig maximal 222.003.552 Byte und langfristig nur 500.269 Byte gespeichert werden, die maximale Dauer beträgt 172.800 Sekunden und maximale Größe 1.000.000 Byte für einen Datensatz. Bei mehr als 10.000 Datensätzen wirft die Appengine eine Exception und steigt mit einem 500 Server Error aus.

 Als Alternative zum Memcache können auch die maximal 128 MB RAM je Instanz genutzt werden. Der Memcache hat eine Lebenszeit von bis zu 2 Tagen und kann für mehrere parallel laufende Instanzen Daten temporär zwischenspeichern. Er eignet sich daher zum cachen von Datensätzen aus dem Datastore oder flüchtigen Sessiondaten. Eine Hashmap kann wesentlich schneller über den Hauptspeicher einer Instanz verarbeitet werden. Zudem skaliert der Hauptspeicher bei jeder zusätzlichen Instanz linear.

Eine Instanz wird bereits nach wenigen Sekunden Inaktivität wieder gekillt, wobei der Memcache zu der Appengine erhalten bleibt. Daraus ergibt sich folgende Caching-Strategie: beim Warmup der Appengine werden aus dem Datastore die am häufigsten benötigten Datensätze gelesen und im Memcache zwischengespeichert. Für jeden Datensatz sollte das Limit von 1.000.000 Byte möglichst ausgenutzt werden. Dies kostet weniger Datastore-Ops pro Tag für das Einlesen der Datenbank in den Memcache. Mittels ZIP-Kompression können im Memcache je nach Datenbasis kurzfristig bis zu 1 GB gespeichert werden. Nachdem in den Memcache die (komprimierten) Daten aus dem Datastore geladen wurden, wird beim initialien Loading Request je Instanz dessen RAM initialisiert. Als eigentlicher Cache für die (dekomprimierten) Daten fungiert nicht der Memcache, sondern der Hauptspeicher einer Instanz.

Langfristig können nur ca. 500 KB für mehrere Stunden im MemCache gehalten werden. Da der Scheduler alte Daten aus dem MemCache löscht, können „dauerhaft“ zu speichernde Keys nach jedem temporären Datensatz erneut geschrieben werden, damit dieser als jüngster zuletzt gelöscht wird. Theoretisch sollte es auch funktionieren den dauerhaften Datensätzen einen Timeout von 2 Tagen und den temporären einen Timeout von z.B. 2 Stunden zu vergeben.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: