Memcache vs. APC für das Daten-Caching auf einer einzelnen Server-Site

Lesezeit: 6 Minuten

Ich habe eine einzelne Server-Site, die 200.000 Unquiues pro Tag pusht, und der Datenverkehr verdoppelt sich ungefähr alle 40 Tage (in den letzten 5 Monaten jedenfalls).

Ich plane so ziemlich nur, die Ausgabe von mysql_query-Funktionen etwa eine Stunde lang zwischenzuspeichern. Wenn der Cache älter ist, führen Sie die Abfrage aus und legen Sie das Ergebnis für eine weitere Stunde in den Cache zurück.

Meine MySQL-DB ist etwa 200 MB groß (wächst vielleicht um 10-20 MB/Monat).

Ich mache viel Datei-Caching, indem ich HTML-Ausgaben schreibe und sie für ein paar Minuten verwende und dann den HTML-Code neu generiere.

Da es sich um eine Datenbankseite handelt, die viele Sortier-, Such- und Ordnungsmethoden sowie Paginierung zulässt, sind leider über 150.000 Seiten im Cache gespeichert. Ich cache auch nicht die Suchanfragen, die die meiste Last verursachen.

Ich möchte ein Caching-System implementieren und wollte wissen, welches schneller ist. Würde gerne ein paar Benchmarks sehen.

  • +1, Diese Frage hat mir geholfen, danke Stackoverflow.

    – Imran Naqvi

    16. Mai 2011 um 6:57 Uhr


Benutzer-Avatar
Straße

EIN schnell googeln sagt, dass APC fünfmal schneller ist als Memcached.

Meine Erfahrung sagt, dass APC fast 7-8 Mal schneller ist als Memcached.. aber auf Memchached kann von verschiedenen Diensten zugegriffen werden (zum Beispiel, wenn Sie hauptsächlich auf Apache laufen und etwas Datenverkehr, z. B. statische Inhalte wie Bilder oder reines HTML, an delegieren ein anderer Web-Service, wie lighttpd), der sehr nützlich, wenn nicht sogar unverzichtbar sein kann.

APC hat weniger Funktionen als Memcached und ist einfach zu verwenden und zu optimieren, aber das hängt von Ihren Bedürfnissen ab.

  • +1, ich habe die neue Frage nicht gestellt, weil es ein Duplikat wäre und danke @DaNieL, deine Antwort ist meine Lösung.

    – Imran Naqvi

    16. Mai 2011 um 7:00 Uhr

  • Können Sie den Link angeben, wo Google das sagt? Danke im Voraus.

    – Gerry

    28. September 2011 um 17:23 Uhr

  • @Gerry: mit google sagt… Ich meine die ersten Ergebnisse bei einer Google-Suche

    – Straße

    29. September 2011 um 7:34 Uhr


  • Wir haben einen deutlichen Rückgang der Ausführungszeit festgestellt, als wir alle Abfragen, die nicht von Memcached auf APC verteilt werden mussten, umgestellt haben. unsere stimme geht also für apc, wenn sie nur lokalen zugriff benötigen.

    – anonym

    28. März 2013 um 12:47 Uhr

  • @Strae, ich habe Blogposts gelesen, in denen behauptet wird, dass Benchmarks für APC 30-mal schneller sind.

    – Schrittmacher

    19. Januar 2015 um 9:04 Uhr

Wie Sie bereits erwähnt haben, gibt es einige verschiedene Aspekte des Cachings. Ich würde mich wahrscheinlich auf die folgenden Aspekte des Cachings in Ihrer PHP-App konzentrieren:

  • Opcode-Caching, das den kompilierten Bytecode von PHP-Skripten zwischenspeichert. Sie können hier einen Benchmark sehen (wenn auch ein älterer Artikel): http://itst.net/654-php-on-fire-three-opcode-caches-compared
    Hinweis: Ich empfehle dringend, Opcode-Caching zu verwenden.

  • Zwischenspeichern von Benutzerdaten – APC und andere tun dies. Dies wären Ihre Referenzdaten oder Daten, die ziemlich statisch sind und sich nicht oft ändern. Sie können den Cache jeden Tag löschen oder einen leeren Cache auslösen, wenn sich diese Referenzdaten ändern. Dies wird auch dringend empfohlen, da Referenzdaten normalerweise häufig verwendet werden und sich nicht häufig ändern.

  • Caching von SQL-Abfragen – Ich weiß, dass Zend diese Aufgabe mit einem einfachen Setup vereinfacht. Da sich diese Abfragen nicht ändern, ist dies eine weitere offensichtliche (wie Sie erwähnt haben).

Zusätzlich (wenn möglich):

  • Zwischenspeichern von HTML-Seiten – Offensichtlich ist das Zwischenspeichern einer statischen Seite schneller als das einer generierten Seite, und normalerweise ist dies schwierig, da die meisten Seiten in Apps so dynamisch sind. Es lohnt sich, wenn Sie es tun können, aber wenn Ihre Abfragen zwischengespeichert werden und Ihr SQL einfach ist, würde ich mich nicht darauf konzentrieren.

  • Zwischenspeichern von SQL-Ergebnissen – ich persönlich halte mich davon fern. Ich lasse die Datenbank ihre Arbeit machen und was sie am besten kann, da das DBMS normalerweise über Caching verfügt. Ich kann die Ergebnisse für den Ausführungs-Thread zwischenspeichern (dh ich habe das gerade abgerufen, also mache es nicht noch einmal), aber ich gehe nicht viel darüber hinaus.

Ich habe APC und eAccelerator erfolgreich verwendet (ich persönlich arbeite gerne mit APC und es soll Opcode-Caching und Benutzerdaten-Caching für meine Referenzdaten und SQL-Abfragen verwenden). Verwenden Sie XDebug, um Ihren Code zu profilieren.

  • Ich bin mir nicht sicher, ob ich den Unterschied zwischen dem Caching von SQL-Abfragen und dem Caching von SQL-Ergebnissen verstehe. Warum sollte ich das nicht zwischenspeichern wollen?

    Benutzer15063

    25. November 2009 um 3:38 Uhr

  • Beim SQL-Abfrage-Caching werden die SQL-Anweisungen zwischengespeichert (dh Guthaben vom Konto auswählen, bei dem die ID = ?) – diese ändern sich nicht. Das Ergebnis dieser Abfrage kann 200,00 $ betragen, aber dieser Betrag kann sich je nach Datentyp ändern, mit dem Sie es zu tun haben. Typischerweise sind die Abfragen im Vergleich zu den möglichen Ergebnissen nur wenige.

    – Artur Frankel

    25. November 2009 um 14:32 Uhr

  • Hier ist eine Erklärung von Doctrine (ORM) – Doktrin-Projekt.org/documentation/manual/1_0/en/caching

    – Artur Frankel

    25. November 2009 um 14:47 Uhr

Sie möchten den Schlüsselwertspeicher von APC mit Memcache vergleichen, richtig? Weil APC auch Opcode-Cache macht, was eine andere Sache ist.

Nun, auf einem einzelnen Rechner ist der APC-kv-Cache viel schneller als Memcache. Memcache hat mehr Funktionalität, ist aber für verteilte Umgebungen gedacht, während APC nur auf einzelnen Servern funktioniert.

Ich habe kürzlich einen Benchmark durchgeführt, um 1 Million Schlüssel in beiden festzulegen und dann zu erhalten, jeder Schlüssel war eine sequentielle Ganzzahl und die Werte waren eine 32-Byte-Zeichenfolge.

Über localhost konnte Memcache 12.000 Schlüssel/Sekunde in einem einzigen Thread abrufen. APC gab 90K/Sekunde zurück. Wenn Sie jedoch Multi-Threads oder “multi_get” mit Memcache verwenden, kommt es der APC-Leistung sehr nahe.

Der Benchmark lief auf einem 1 GB vps bei Slicehost.

Benutzer-Avatar
Khizar Ansari

in meinem fall ist apc 59 mal schneller als memcache

<?php
ini_set('apc.enable_cli','1'); //if u run in cli you may need to do changes in php.ini
error_reporting(E_ALL);
$mem=new Memcache();
$mem->connect('127.0.0.1',11211);
$mem->replace('testin','something');
$i=0;
$time=time()+microtime();
apc_store ( 'testin','something');
$num=1000000;
while($i<$num){
 $mem->get('testin');
$i++;
}
echo "memcache took: ",time()+microtime()-$time," for 1 million gets","\n";
$time=time()+microtime();
$i=0;
print_r(apc_fetch('testin'));
while($i<$num) {
apc_fetch('testin');
$i++;
}
echo "apc took: ",time()+microtime()-$time,"for 1 million gets \n";

hier ist die ausgabe

memcache took: 37.657398939133 for 1 million gets
somethingapc took: 0.64599800109863for 1 million gets

Es ist fast unmöglich, genau vorherzusagen, was schneller ist. Ich würde Tests mit beiden in einer Entwicklungsumgebung mit ähnlichen Daten durchführen.

Wenn Leistung wichtig ist, verwenden Sie immer einen Profiler.

  • Dies ist eine faule Standardantwort. Eigentlich ist es ist möglich, genau vorherzusagen, was schneller wäre. Beachten Sie, dass wir nicht daran interessiert sind, wie viel schneller wir sind die ist schneller.

    – Schrittmacher

    19. Januar 2015 um 9:07 Uhr


Benutzer-Avatar
derevo

Ich verwende IPB 3.1.4 mit APC, es funktioniert nur doppelt so schnell wie ohne.

Requests per second:    43.46 [#/sec] (mean)
Requests per second: 24.23 [#/sec] (mean)

Testen Sie IPB noch nicht mit memcached

  • Dies ist eine faule Standardantwort. Eigentlich ist es ist möglich, genau vorherzusagen, was schneller wäre. Beachten Sie, dass wir nicht daran interessiert sind, wie viel schneller wir sind die ist schneller.

    – Schrittmacher

    19. Januar 2015 um 9:07 Uhr


1112110cookie-checkMemcache vs. APC für das Daten-Caching auf einer einzelnen Server-Site

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy