Archive for September, 2008

Gesang

Sonntag, September 28th, 2008

Details des Verstosses:
weil sie zu laut singt

Warum Caching mit Memcached toll ist

Samstag, September 20th, 2008

MySQL ist toll, denn es kann

  • Benutzerauthentifizierung mit Rechtekonzept
  • diverse Storage-Engines
  • Caching für diverse Dinge
  • verschiedene Indextypen
  • Volltextsuche
  • JOINs
  • umfangreiche Möglichkeiten der Selektion (WHERE-Bedingungen)
  • Sortierung der Daten
  • Recovery
  • Transaktionen
  • Locking

Gar nicht übel, oder?
Aber eigentlich sollte es doch um Memcached gehn. Was ist also so toll an Memcached?
Er kann von alle dem nichts und genau das ist seine Stärke:
Im Gegensatz zur (vergleichesweise langsamen) eierlegenden Wollmilchsau MySQL kann Memcached genau eine Sache: Daten (nicht persistent) speichern.
Dazu wird ein Server, der eigentliche Memcached, benötigt, auf welchen dann mit einer der zahlreichen Client-Libraries zugegriffen werden kann.
Bevor man loslegt sollte man sich zunächst über ein paar Besonderheiten klar werden:

  • Es gibt keine Zugriffskontrolle: Wer auf den Port verbinden kann, kann auch alle Daten auf dem Server lesen/schreiben – IpTables sind also Pflicht
  • Die Daten werden nur im RAM gehalten, sind also nach einem Neustart weg. Memcached ersetzt also keinesfalls eine Datenbank
  • Auf die Daten kann nur mittels eines eindeutigen Schlüssels zugegriffen werden. Iterieren ist nicht möglich
  • Die verschiedenen Client-APIs sind i.d.R. nicht kompatibel. Was man z.B. mit Perl schreibt, kann man mit PHP vermutlich nicht lesen
  • Memcached ist SCHNELL!

Sobald man das verdaut hat, kann man sich Gedanken darüber machen, wie man das nutzen kann.

Beispiel aus dem echten Leben (Der Zugriff erfolgt über PHP und mit dem prozeduralen Interface – Nähere Infos bei PHP.net):
Wir haben mehrere Millionen Gästebucheinträge von denen immer die X aktuellsten auf dem Profil des jeweiligen Benutzers angezeigt werden. Bei jedem Profilaufruf müssen also aus diesen Millionen Einträgen die Einträge des Profilbesitzer herausgesucht, chronologisch sortiert und dann ausgegeben werden. Das geht mit MySQL wunderbar, verbrät aber logischerweise einiges an Resourcen. Da Gästebücher aber wesentlich öfter gelesen, als geschrieben werden, bietet sich hier der Einsatz von Memcached an:
Beim Aufruf der Seite versucht man zunächst mittels memcache_get($connection, $gaestebuchid); die Einträge aus dem Cache zu lesen, falls das klappt ist alles bestens und man kann sie ausgeben ohne den MySQL-Server belästigen zu müssen. Werden die Einträge nicht gefunden, dann liest man die Daten ganz normal aus der Datenbank und schreibt sie anschließend mittels memcache_set($connection, $gaestebuchid, $gaestebuchArray); in den Cache, so dass sie (hoffentlich) beim nächsten Aufruf verfügbar sind. Wenn man dann noch daran denkt mittels memcache_delete($connection, $gaestebuchid); den Cacheeintrag zu löschen, wenn ein neue Eintrag hinzukommt/sich etwas ändert, dann hat man schon seinen ersten, wirkungsvollen Cachingmechanismus mittels Memcached implementiert.

Zweites Beispiel:
Um die Anzahl der eingeloggten Benutzer anzuzeigen müssen bei uns die MySQL-Tabelleneinträge der User gezählt werden, deren letzte Aktivität mehr als X Minuten zurück liegt. Da sich diese Zugriffzeit sehr häufig ändert (nämlich mit jedem Klick des Benutzers) wäre es sehr ineffizient einen Index auf die entsprechenden Spalte zu legen, was aber zu folge hat, dass MySQL jeden einzelnen Tabelleneintrag durchgehn (Table-scan) und die gespeicherte Zeit mit dem Timeout vergleichen muß, was widerrum natürlich sehr aufwändig ist.
Mit Memcached wird auch das besser: Man prüft zunächst wieder mit memcached_get ob die aktuelle Nutzerzahl schon im Cache steht, falls ja, gibt man diese aus, falls nicht muß doch wieder der MySQL-Server herhalten. Anschließend speichert man den Wert natürlich im Cache. Würde man das aber mit einem simplen memcache_set($connection, ‘onlineuser’, $onlineuser); machen, so würde man für die komplette Laufzeit des Cache-Servers die gleiche Onlineuserzahl geliefert bekommen (weil das get jedesmal erfolgreich wäre und der SQL-Server nie mehr befragt würde). Deshalb gibt es die Möglichkeit Memcached-Einträgen einen Timeout zu verpassen. Mittels memcache_set($connection, ‘onlineuser’, $onlineuser, 0, 60); würde dieser z.B. auf 60 Sekunden festgesetzt. Nach dieser Zeit findet man im Cache keine Onlineuserzahl mehr, so dass der SQL-Server wieder befragt wird und die Zahl sich somit minütlich erneuert.

Wie man hoffentlich deutlich erkennen kann zeigt Memcached seine Stärke nur in Verbindung mit einer Datenbank im Hintergrund. Er kann (und will) also einen Datenbankserver nicht ersetzen, aber er kann auf erstaunlich einfache Weise helfen selbigen zu entlasten.

Sollte noch jemand interessante Praxisbeispiele oder Ergänzungen haben, würde ich mich freuen darüber in den Kommentaren zu lesen.

Geruchs-Internet

Donnerstag, September 18th, 2008

Details des Verstosses:
er stinkt

Gangmitglied

Sonntag, September 14th, 2008

Details des Verstosses:
diese gruppe bringt leute in eine gang ohne das mann es weiss und wen man siech
weiger rein zu gehn dan gibts richtigen ergär deswegen würde ich sie bitten diese
gruppe zu eliminiren oder so ich hatte selber erfahrung damit ich habe auch schlege
gekrigt wil ich raus bin

vile babys katze

Freitag, September 12th, 2008

hallo ich will eine baby katze
1-7 wochen alte katze wenn sie es nicht mehr wollen
oder wenn ihre katze vile babys bekommen hat
ich will es kostenlos ich habe kein geld bis jetz habe ich 11.23cent ich bin 11 jahre alt am besten ist si wohnen in XXX
dankeschön cüs

First Contact

Donnerstag, September 11th, 2008

Folgende Anfrage erreichte uns eben über unser Kontaktformular:

ich will kontakt

Nigger-Russen?

Montag, September 8th, 2008

Details des Verstosses:
ihr scheiß nigger ihr russen

Länderfrage

Montag, September 8th, 2008

Details des Verstosses:
seit wann gibt es ein kurdistan?? das ist dei türkei was er meint…ich finde so was
unverschämt…ich sag ja auch net zu deutschland , das ist “schweiz”…

inda House

Freitag, September 5th, 2008

Manchmal erreichen und sehr informative Anfragen über unser Kontaktformular:

ich bin firdes ich bın in ında turkei

Vogel F und guter Saunt

Donnerstag, September 4th, 2008

hallo ich ferkaufe mein pc es hat 80 gb 512 ram 2 dvd laufwerke schönes geheuse fohrne usb und saunt anschluss ein tv karte nur kein treiber 2,2 ghz nur ich hab kein xp cd meher dashalb kann ich kein program drauf machen hat kein problem nur für abholer man kann das auch testen ….
mein preis ist 70euro ist noch kleines bisen handelbar …