2010-06-30 13 views
19

Ich denke nicht, dass es mir noch klar ist, ist es schneller, Dinge aus einer Datei oder Memcached zu lesen? Warum?Welche ist schneller/besser für Caching, Dateisystem oder Memcached?

+0

Sie müssen spezifischer werden, was sind Ihre Datensätze und Zugriff patters, ist dies ein lokaler mechaced Server oder verteilt? Wie hoch sind die Kosten für den Netzwerkzugang? Wie groß sind die Informationen, die Sie speichern? Welche Festplatten laufen Sie? –

+0

Fragen wie diese sind besser geeignet für http://superuser.com/ –

+0

Ich weiß nicht so viel über die Details, ich denke in einfachen Worten: einfache Einrichtung, einfache App, 1 Memcache-Server, 100 Dateien ... –

Antwort

23

Memcached ist schneller, aber der Speicher ist begrenzt. HDD ist riesig, aber I/O ist langsam im Vergleich zum Speicher. Sie sollten die heißesten Dinge zu memcached setzen, und alle anderen können gehen zu Cache-Dateien.
(Oder Mann und etwas Geld in mehr Speicher wie these guys :)

investieren Für einige Benchmarks finden Sie unter: Cache Performance Comparison (File, Memcached, Query Cache, APC)

Theoretisch:

Read 1 MB sequentially from memory       250,000 ns 
Disk seek        10,000,000 ns 

http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf

+5

Die von Ihnen verknüpften Benchmarks zeigen das genaue Gegenteil Ihrer Anweisung - Memcached ist langsamer als das Lesen von der lokalen Festplatte. Könnten Sie die Diskrepanzen klären? – DOOManiac

0

Sie sind awesome Vauge auf die Details. Und ich glaube die Antwort, die Sie suchen, hängt von der Situation ab. Meines Wissens sind nur sehr wenige Dinge besser als die anderen.

Offensichtlich wäre es nicht schneller, Dinge aus dem Dateisystem zu lesen (vorausgesetzt, es ist eine Festplatte). Sogar ein SDD wird merklich langsamer sein als In-Memory-Reads. Und der Grund dafür ist, dass HDD/FileSystem für Kapazität und nicht Geschwindigkeit gebaut ist, während DDR-Speicher aus diesem Grund besonders schnell ist.

Gutes Caching bedeutet, dass Teile, auf die häufig zugegriffen wird, im Speicher und die nicht so häufig verwendeten Dinge auf dem Datenträger (persistenter Speicher) gespeichert werden. Auf diese Weise würde der normale Fall durch Ihre Caching-Implementierung erheblich verbessert werden. Das ist dein Ziel. Stellen Sie sicher, dass Sie Ihre ideale Caching-Richtlinie gut verstehen. Dies erfordert umfangreiche Benchmarks und Tests.

11

Es gibt eine ganze einige verschiedene Aspekte, die den einen oder anderen bevorzugen könnten:

  • Müssen Sie diese Daten zwischen mehreren Servern teilen? Das Dateisystem ist lokal, auf memcached wird über ein Netzwerk zugegriffen.
  • Wie groß sind die Artikel, die Sie cachen? Das Dateisystem ist wahrscheinlich besser für große Objekte.
  • Wie viele Memcached-Anfragen können pro Seite vorhanden sein? TCP-Verbindungen und -Abbrüche können mehr Zeit in Anspruch nehmen als ein einfaches Dateisystemstatut() auf dem lokalen Rechner.

Ich würde vorschlagen, dass Sie Ihren Anwendungsfall betrachten und einige Profiling beider Ansätze machen. Wenn Sie mit dem Dateisystem fortfahren können, dann würde ich. Hinzufügen von Memcached-Adds in einer anderen Ebene von Komplexität und potenziellen Fehlerpunkten (memcached Client/Server).

Für was es wert ist, die anderen Kommentare über Datenträger vs Speicher Leistung kann akademisch sein, als ob auf die Dateisystemdaten regelmäßig zugegriffen wird, dann wird es wahrscheinlich in OS oder Disk-Cache-Speicher trotzdem sitzen.

0

Es hängt davon ab, ob der Cache lokal gespeichert wird. Memcache kann Daten über ein Netzwerk speichern, das nicht unbedingt schneller ist als eine lokale Festplatte.

0

In der Tat ist es nicht so einfach, dass das Lesen aus dem Speicher viel schneller ist als das Lesen von der Festplatte.Wie Sie wissen, basiert Memcached auf tcp-Verbindung, wenn Sie jedes Mal eine Verbindung herstellen, wenn Sie etw auf Memcached-Server stellen wollen (was die meisten Programmierer tun), ist es schlechter als der Dateicache. Sie sollten das statische Memcached-Objekt verwenden und das Objekt erneut verwenden. Zweitens werden die modernen Betriebssysteme Dateien zwischenspeichern, die häufig verwendet werden, wodurch Dateicaches schneller als Memcaches sind, die tatsächlich TCP-Verbindungen sind.

2

"Schneller" kann nicht ohne Kontext verwendet werden. Zum Beispiel kann der Zugriff auf Daten in memcached auf dem Remote-Server aufgrund der Netzwerklatenz "langsamer" sein. Auf der anderen Seite kann das Lesen von Daten aus dem Remote-Server-Speicher über ein 10-Gb-Netzwerk "schneller" sein als das Lesen derselben Daten von der lokalen Festplatte.

Der Hauptunterschied zwischen dem Zwischenspeichern auf dem Dateisystem und dem Verwenden von Memcached ist, dass Memcached eine vollständige Caching-Lösung ist. So gibt es LRU-Listen, Ablaufkonzept (Datenfrische), einige Operationen auf hoher Ebene, wie cas/inc/dec/append/prepend/replace.

Memcached ist einfach zu implementieren und zu überwachen (wie unterscheiden wir die "Cache" -Auslastung des Dateisystems von, sagen wir Kernel? Können wir die Gesamtmenge der zwischengespeicherten Daten berechnen? Datenverteilung? Kapazitätsplanung? Usw.).

Es gibt auch einige hybride Systeme, wie cachelot Grundsätzlich ist es memcached, das direkt in die Anwendung eingebettet werden kann, so dass der Cache ohne irgendwelche Systemaufrufe oder Netzwerk-IO zugänglich wäre.

Verwandte Themen