Sphinx für MySQL

Sphinx hat wie im letzten Post schon angesprochen viele vorteile in Bezug auf die Geschwindigkeit der Abfragen.

Die Vorteile:
Extrem Schnelle querys (5-10s -> 0,5s oder weniger)
Wenig Systembelastung im Betrieb (effektiv 0)

Nachteile:
Sehr schwere Konfiguration (siehe unten)
Nur bedingt geeignet für ständig upgedatete DBs (zB. bei uns im Hintergrund eine Screen die im 2s Takt updated)
Legt große Files ab für den Cache (Bei unserer ca. 1Gb DB fast 7Gb)
Querybuilding schwer (s.u.)

Konfiguration:
Gute Frage, keine Ahnung wie wir das geschafft haben – Aber leicht wars nicht.
Aus meiner Erinnerung:
MySQL patchen und Sphinx plugin laden
Sphinx konfigurieren
Die Updates (Cron/Screen/beides)

Das Plugin laden ist jetzt nicht schwer, eine zeile in der my.cnf – Dagegen die Sphinx config schon eher, unsere als Beispiel (zensiert & gekürzt):

Show ▼

Wie man sieht… nicht leicht (zumindest für mich).

Dazu der Cronjob für die DB (Volles Update):
*/1 * * * * /usr/local/bin/indexer --rotate delta > /dev/null
00 3 * * * /usr/local/bin/indexer pre --quiet --rotate > /dev/null

Und der im 2s gestartete Task für neue Inserts:
/usr/local/bin/indexer --rotate delta

Und eben das Querybuilding, am beispiel von node.js:

Query builden:
Show ▼

Und die Abfrage selbst (am Beispiel von Pre):
Show ▼

Wie man sieht gibt es Vor und Nachteile, die sich aber wenn man wirklich schnelle querys braucht sehr schnell wieder aufwiegen.
Thanks to Max @ dupenet.com for the help with the configuration, BuGG for the query debugging and [name not released] for the API coding.

~W

This entry was posted in Uncategorized. Bookmark the permalink.