deenfritptrues

Breadcrumbs

Ich hatte auf meiner "Erwachsenen Videos Suchmaschine" poppler.biz immer wieder mal Performanceprobleme bei verschiedenen Such abfragen und hab angefangen rum zu tüfteln, wie ich die Performance noch verbessern kann.

 

Angefangen von einer einfachen SQL Abfrage wie 

SELECT url,title FROM tabelle force index (Z01) WHERE title LIKE '%Amateur%' OR description LIKE '%Amateur%' ORDER BY link_id DESC LIMIT 0,12;

die relativ schnell ziemlich langsam wurde mit einer SQL Zeit von etwa 22 Sekunden, als mehr als 11 Millionen Einträge in der Tabelle vorhanden waren, weiter zu einer Abfrage über einen

 

Fulltext Index mit DB Engine InnoDB

SELECT url,title FROM tabelle WHERE MATCH (title,description) AGAINST ('+*Amateur*' in boolean mode) ORDER BY id DESC LIMIT 0,12;

Welche dann deutlich schneller war, mit etwa 10 Sekunden für eine Query.

 

Jetzt hätte ich weiter mit Joins weiter optimieren können, um die Abfrage bzw. die Anzahl der Zeilen zum Sortieren zu verringern.

 

Aber dann hab ich mir die Open Source Search Engine SPHINX angesehen.

 

Nach ein bisschen einlesen in die Konfiguration, hab ich dann auch recht schnell den Index mit Sphinx aus den Daten der MySQL Tabelle angelegt.

 

Zu Sphinx verbindet man sich dann ähnlich wie zu MySQL, nur über einen anderen Port zb. mit dem Befehl

 

mysql -h0 -P 9306 "DBNAME"

Und die SQL Syntax sieht so aus

SELECT url,title FROM SPHINXINDEXNAME where MATCH ('@(title,description) *Amateur*') ORDER BY id DESC LIMIT 0,12;

Und die Dauer der Query ist hier nur noch 1,14 Sekunden lang.

 

Das ist eine deutlich Verbesserung gegenüber der MySQL Fulltext Index Suche.

 

In den PHP Files muss natürlich der DB Connect String angepasst werden wie etwa

$sphinxconnect = mysqli_connect("127.0.0.1",$dbuser,$dbpass, $dbname, 9306);

Und entsprechend dann die SQL Syntax für SPHINX Abfragen.

$sql = "SELECT url,title FROM SPHINXINDEXNAME where MATCH ('@(title,description) *".$SUCHPARAMETER."*') ORDER BY id DESC LIMIT 0,12;";

$raw_results = mysqli_query($sphinxconnect, $sql);

...

Die Experience für die Webseitenbesucher ist damit deutlich besser. Ich muss  mich aber noch hinsetzten und analysieren, warum manche Suchwörter deutlich schneller ist als andere.

 

Das Suchwort "Amateur" wie oben als Beispiel angegeben ist eines der eher langsameren.

Wenn man es mehrmals hintereinander abfragt, geht sie Query Zeit unter eine Sekunde.

Das könnte man noch mit mehr Speicherzuweisung optimieren. Damit Queries möglichst lange im Cache bleiben.

 

Wenn man abere nach "Hentai" sucht, dauert eine Query nur 0.11 Sekunden.

 

Gut, es gibt hier deutlich weniger Ergebnisse und daher eine geringer Datenmenge zum sortieren.


Dennoch möchte ich die Abfragen, für Wörter die sehr häufig vorkommen, noch tunen, ohne das am Ende das Ergebnis abgekürzt wird.
Um die ORDER BY DESC Klausel kommen ich leider nicht herum, da ich die neuesten der ID nach zuerst anzeigen möchte.

 

Meine Empfehlung ist auf jeden Fall, wenn Ihr große Tabellen mit Millionen von Einträgen habt und die Suche darin nicht so performt wie ihr das gerne hättet, dann schaut euch mal SPHINX an.

 

Dokus zur Installation gibt es im Netz genug, für diverse Linux Distributionen, MacOS oder Windows.

 

Wer Fragen zu meiner Installation oder Konfiguration hat, kann gerne hier Kommentieren oder mich kontaktieren.

 

 

 

 

 

Auch bei mir ist es leider so, das ich nicht immer ins Schwimmbad komme, um mehr Trainings im Element Wasser zu absolvieren.

 

Trotzdem möchte man beim nächsten Schwimmwettbewerb oder Triathlon so schwimmen, das man nicht völlig erschöpft aus dem Wasser kommt.

Auf Tipp meines Trainers hab ich mir dann das Stretchcordz Gummizug mit Paddle besorgt.

 

Da gibt es verschieden Stärken. Ich habe mit den Grünen angefangen.

Diese haben eine Zugstärke von 3,6 kg (Anfangs)  bis 10,8  kg(Voll nach unten durchgezogen) 

Das finde ich optimal für Ausdauereinheiten. zb: 30 Minuten durchgehend damit ziehen.

 

Aktuell benutze ich aber hauptsächlich die Roten.

Diese haben eine Zugstärke von 5,4kg bis 14,1kg.
Damit simuliere ich Intervall Training. Zum Beispiel mit einem HIIT Counter für 1:30 aktiv ziehen und 30 Sekunden Pause.

10 bis 20 Wiederholungen. Je nachdem wie viel Kraft und Zeit man hat.

Das Hauptproblem aber war, wo montiere ich die Paddles?

Diese haben zwar eine Schlaufe, um sie an Haken, Türklinken etc. einzuhängen, aber wollte die Paddels über dem Kopf hängen haben.

Ein ständig gebeugtes stehen und ziehen ist für längere Einheiten einfach zu mühsam für den Rücken.

 

Dann fing ich an zu basteln und hab mir ein Holzbrett, etwa 120cm x 40cm an die Zimmerdecke geschraubt.

 

Darauf auf einem Enden einen Haken etwas schräg hineingeschraubt (vorbohren nicht vergessen!) und am anderen Ende zwei fixe Möbelrollen mit Gummirollen.

 

In die Rollen habe ich noch mit einem Dremel Rillen in den Gummi gefräst, damit der Gummi nicht so leicht hin und herrutscht beim ziehen.

 

Das ganze sieht dann so aus.

 

Stretchcordz Holzbrett 1

 

Stretchcordz Holzbrett 2

 

Wenn ihr jetzt 2 - 3 Mal die Woche zusätzlich damit trainiert, werdet im beim nächsten Bewerb sicher fitter sein, also ohne die verpassten Schwimmeinheiten :-)

 

Ein Techniktraining im Wasser können die Stretchcordz natürlich nicht ersetzen. Auch nicht einen guten Trainer ;-)

 

Hier noch ein Video dazu:

Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
Ok