2016-04-03 4 views
0

Ich muss einen einzelnen MemCache-Schlüssel in Google App Engine für alle Instanzen freigeben. Diese Taste wird zum Lesen und Inkrementieren mit einer hohen Rate (500/Sek.) Verwendet.App Engine Memcache ein einzelner gemeinsamer Wert für alle Instanzen

Google schlägt vor, keine "Hot Keys" zu verwenden und stattdessen die Verwendung von Datenspeichern zu empfehlen. Da ich einen Wert nicht durch einen einzelnen Befehl im Datenspeicher erhöhen oder verringern kann, ist dies für mich nicht verwendbar.

Welche andere Option habe ich?

Danke

+0

haben Sie Verständnis, dass memcache für Temperaturwerte? es kann in jedem unvorhersehbaren Moment verloren gehen –

+0

Warum temp? Dedicated Memcache garantiert Haltbarkeit, nicht wahr? – Forepick

+2

@Forepick: dedicated memcache kann nur mit Vorsicht vor Räumung aufgrund von Speicherdruck schützen, aber es gibt andere Gründe, für die Memcache-Werte verschwinden können, sogar von dedizierten Memcache - https://cloud.google.com/appengine/docs/python/memcache/# Python_How_cached_data_expires (und der nächste Abschnitt). –

Antwort

2

Was Sie suchen, heißt Sharding Counters.

Grundsätzlich benötigen Sie ein paar CounterShard Entities, um Wert zu speichern. Sie brechen Ihren Inkrementschritt in unabhängige Zähler auf, laden und addieren dann alle Werte, wenn Sie sie benötigen (sie sind billig).

Für 500/Sek. Ich denke, Sie brauchen bis zu 100 Shards, aber ich schlage vor, Sie nur wenige Experimente zu machen, um den besten Wert zu finden.

Es ist voll Beispiel heißen, es zu benutzen: https://cloud.google.com/appengine/articles/sharding_counters