Memcached (oder Coherence ) speichert ganze Ergebnismengen zwischen . Ein Cache in der Datenbank speichert Datenbankzeilen zwischen. Angenommen, Sie haben ein Zugriffsmuster, bei dem die Abfrage behoben ist und sich die Daten selten ändern (z select * from restaurants where location='london'
. B. ). Sie können diese Abfrage bei jedem Hinzufügen eines neuen Restaurants tausende Male ausführen. Wenn Sie also die gesamte Ergebnismenge zwischenspeichern, ist es sinnvoll, jedes Mal in die Datenbank zu wechseln. Sie verfügen jedoch weiterhin über die Verwaltbarkeit und Flexibilität von RDBMS und SQL (Sie müssen nur gelegentlich den Cache rausschmeißen, wenn sich die Daten ändern). Einige Leute nennen diese Referenzdaten oder statische Daten.
Angenommen, Sie haben ein Ad-hoc-Zugriffsmuster (möglicherweise gibt es viele Optionen für Ihren Benutzer, um genau zu finden, wo er heute Abend essen möchte, aber es kommt selten vor, dass zwei Benutzer genau dieselben Einstellungen haben). Dann möchten Sie möglicherweise die Zeilen zwischenspeichern (um das Speichern auf der Festplatte zu sparen), aber jede Ergebnismenge im laufenden Betrieb im Speicher zusammenstellen. Dann möchten Sie, dass die Datenbank selbst verwaltet, was und wie sie zwischengespeichert wird. In den meisten Fällen funktioniert ein hybrider oder mehrschichtiger Ansatz am besten.
Beachten Sie, dass es auch eine dritte Art von Caching in Aktion gibt - den Dateisystem-Cache des Betriebssystems. Ich mag diese nicht, aus dem einfachen Grund, dass wenn Sie einen Block von der Festplatte lesen, dieser jetzt im Datenbank-Cache und im Dateisystem-Cache vorhanden ist, die Datenbank jedoch nichts über letzteren "weiß" und dies daher nicht kann Machen Sie etwas Kluges damit, wie sehen Sie, wie oft es verwendet wird. Aus Sicht des Datenbankadministrators wird jeglicher freie Speicherplatz auf dem System verschwendet, über das hinaus, was das Betriebssystem selbst benötigt, um zufrieden zu sein.