2010-04-15 11 views
8

Memcache im Allgemeinen und auf AppEngine im Besonderen 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 könnte, 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?Wie oft verliert Memcache in Google AppEngine Daten?

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?

Antwort

5

Memcache, wie jeder Cache, sollte verwendet werden als ... a cache. Wenn Sie etwas im Cache nicht finden können, 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 enthalten (normalerweise die am wenigsten verwendeten, wenn der Cache voll ist) und legen häufig auch andere Cache-Ungültigkeitsrichtlinien fest (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.

+4

Ich verstehe, dass du mich versuchen, mir selbst zu helfen zu vermeiden, indem sie (ab) in den Fuß zu schießen mit Memcache als etwas anderes als ein Cache. Was ich jedoch gerne sehen würde, sind Statistiken darüber, wie oft ich in der Praxis Daten verlieren würde, um eine fundierte Entscheidung darüber zu treffen, ob es sich lohnt, einige Daten nur für einen bestimmten Zeitraum im Cache zu behalten Zeit. – SoftMemes

+0

@Freed: Statistiken, die Sie heute sammeln können, könnten morgen nicht gültig sein. Seien Sie außerdem vorsichtig mit Statistiken, die Sie sammeln, weil Ihre Stichprobengröße klein und von unbekannter Qualität ist. –

+2

... genau deshalb suche ich nach zuverlässigeren Daten als nur meine eigenen Messungen. Was ich gerne sehen würde, ist etwas in der Richtung der Statistiken, die Google bereits für Latenz und Durchsatz bietet. – SoftMemes

2

Jede konkrete Antwort, die Sie auf diese Frage erhalten, ist zu 100% Änderungen vorbehalten.

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

2

Daten können nicht verloren gehen, aber wenn sie verloren gehen, können sie leicht wiederhergestellt werden.

Zum Beispiel ist es ideal, um Daten aus dem Datenspeicher zu speichern, ist ideal, wenn ein Teil der Daten 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. Dadurch gehen Daten verloren.

Wenn Sie Bedenken hinsichtlich des Ladevorgangs für einen allgemeinen Job haben, wie wäre es, wenn Sie einen Job für die spätere Aktualisierung des Zählers mithilfe der Taskwarteschlange einrichten würden?

0

Ich habe einen shared -memcache basierten Statistik-Zähler implementiert, der stündlich zu DB sammelt und Cache-Verlust identifizieren kann (log es). Bisher sehe ich konstant < 10% Cache-Verluste insgesamt jeden Tag nach höchstens 1h (durchschnittlich 30 Minuten) Cache-Zeit mit ca. 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 sehr häufig vorkommt), eine höhere Wahrscheinlichkeit haben, fallengelassen zu werden.

Meine App verwendet < 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. Stats counter used.

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.

Memcache loss (blue) vs. success (red)

Verwandte Themen