Wie oft verliert Memcache in Google AppEngine Daten?

8

Memcache im Allgemeinen und AppEngine im Speziellen ist unzuverlässig in dem Sinne, dass meine Daten aus irgendeinem Grund zu irgendeinem Zeitpunkt aus dem Cache gelöscht werden können. In einigen Fällen kann es jedoch Fälle geben, in denen ein geringes Risiko die zusätzliche Leistung wert ist, die memcache geben kann, z. B. das Aktualisieren einiger Daten in Memcache, die regelmäßig in einem anderen, zuverlässigeren Speicher gespeichert werden. Gibt es irgendwelche Zahlen von Google, die mir einen Hinweis auf die tatsächliche Wahrscheinlichkeit geben könnten, dass ein Memcache-Eintrag vor Ablauf der Verfallszeit aus dem Cache gelöscht wird, wenn ich mich an meine Quoten halte?

Gibt es andere Gründe als Hardware-Fehler und administrative Vorgänge wie Maschinen in den Rechenzentren, die aktualisiert / verschoben / ersetzt werden, was dazu führen würde, dass Einträge vorzeitig aus Memcache entfernt werden?

    
SoftMemes 15.04.2010, 23:49
quelle

4 Antworten

5

Memcache sollte wie jeder Cache als ... ein Cache verwendet werden. Wenn Sie etwas nicht finden können im Cache muss es eine Strategie geben, um es im permanenten Speicher zu finden.

Zusätzlich zu den Gründen, die Sie erwähnen, haben Memcache und andere Caching-Ansätze Grenzen für die Anzahl der Elemente, die sie behalten (meist die am wenigsten verwendeten, wenn der Cache voll ist) und setzen häufig auch andere Cache-Invalidierungsrichtlinien ( zB alles für eine Stunde unbenutzt spülen).

Wenn Sie den Cache nicht selbst konfigurieren und betreiben, haben Sie KEINE Garantie, wann und wie Elemente absichtlich / aus dem Cache entfernt werden können.

    
Eric J. 15.04.2010 23:55
quelle
2

Jede konkrete Antwort, die Sie auf diese Frage erhalten, kann zu 100% geändert werden.

Das heißt, ich habe Memcache unter leichten Lasten verwendet, um Daten für etwa 15 Minuten zu sammeln, bevor Sie alles in den Datastore schreiben. Dies war jedoch für völlig unkritische analytische Daten. Verlassen Sie sich nicht darauf.

    
dkamins 16.04.2010 00:01
quelle
2

Es ist nicht so, dass Daten verloren gehen können, aber wenn sie verloren gehen, können sie leicht wiedergewonnen werden.

Zum Beispiel ist es ideal, Daten aus dem Datenspeicher zu speichern, wenn ein Datenelement nicht im Cache ist, kann es leicht abgerufen werden.
Wenn Sie Daten wie einen Zugriffszähler im Cache speichern, kann dieser nicht wiederhergestellt werden, wenn der Cache gelöscht wird, sodass Sie Daten verlieren.

Wenn Sie Bedenken hinsichtlich des Ladevorgangs für einen allgemeinen Job haben, wie wäre es mit einem Job, den Zähler später zu aktualisieren, indem Sie die Aufgabenwarteschlange verwenden?

    
Joseph Salisbury 16.04.2010 00:04
quelle
0

Ich habe einen geteilten -Memcache-basierten Statistik-Zähler implementiert, der stündlich in die DB sammelt und den Cache-Verlust identifizieren kann (logge ihn). Bis jetzt sehe ich ständig & lt; 10% Cache-Verluste insgesamt jeden Tag nach höchstens 1 Stunde (durchschnittlich 30 Minuten) Cache-Zeit mit ungefähr 60 aktiven Zählern. Zählerverluste scheinen zufällige Einzelzähler zu sein. Ich vermute, dass Zähler, die nur einmal inkrementiert werden (was in meinem Fall ziemlich oft vorkommt), eine höhere Wahrscheinlichkeit haben, fallen gelassen zu werden.

Meine App verwendet & lt; 1 MB Gesamt-Memcache im gemeinsam genutzten Memcache-System. Leider ist die Verwendung von dediziertem Memcache mit 1 GB Minimum und erheblichen Kosten pro Jahr nicht möglich. Statistikzähler verwendet .

Ich habe einen Stackdriver-Zähler erstellt, der Memcache-Verluste für einen Zähler aufzeichnet, der jede volle Stunde gespeichert wird. Die Grafik zeigt erfolgreiche Speicherungen in Rot und Memcache schlägt in Blau fehl. Der Zähler speichert jede volle Stunde und hat einige Zählimpulse in der Stunde.

    
cat 25.08.2016 08:56
quelle

Tags und Links