Problem mit großer MySQL-Tabelle

Carny

Well-known member
ID: 171941
L
25 April 2006
2.025
78
Hallo,

ich teste gerade die Library Vogoo für Recommendation Systems in PHP. Funktioniert soweit alles mit kleinen Dataset (100.000 und 1.000.000 Einträge), aber bei dem Dataset mit 10.000.000 Einträgen hapert es, es kommt keine Ausgabe und leider auch keine Fehlermeldung.

Muss ich für solche Tabellengrößen die Standardeinstellungen des MySQL-Servers ändern?

Gruß Carny
 
PHP:
error_reporting() hoch genug, um Fehlermeldungen zu sehen?
Evtl. ein Timeout? :think:
 
MySQL-Querys anschauen, wahrscheinlich sind einige nicht so gut, wie sie sein sollten, die laufen dann eben ewig, PHP bekommt aber keinen Timeout.

:arrow: Explain
:arrow: MySQL SlowQuery Log
:arrow: MySQL Processlist überwachen
:arrow: oder noch weitere Tools, bei maatkit mal vorbeizuschauen kann helfen (googlen ;))
 
PHP:
error_reporting() hoch genug, um Fehlermeldungen zu sehen?
Evtl. ein Timeout? :think:

Ich habe error_reporting(E_ALL); in alle Dateien geschrieben, es gab keine Ausgabe. Ein Timeout kann es auch nicht sein, da die PHP Datei direkt fertig geladen ist ohne Wartezeit, bei kleineren Datensätzen (100k bis 1M) dauert es immer 3-10 Sekunden.

MySQL-Querys anschauen, wahrscheinlich sind einige nicht so gut, wie sie sein sollten, die laufen dann eben ewig, PHP bekommt aber keinen Timeout.

:arrow: Explain
:arrow: MySQL SlowQuery Log
:arrow: MySQL Processlist überwachen
:arrow: oder noch weitere Tools, bei maatkit mal vorbeizuschauen kann helfen (googlen ;))

Ich habe den MySQL SlowQuery Log gerade angeschaltet, dieser enthält allerdings nur den Start-Up Eintrag von MySQL. maatkit kann mir leider auch nicht helfen, da ich die Testinstanz bei mir lokal auf Windows mit Xampp installiert habe.

Sorry, falls dass hier ein bisschen fehl am platz ist, aber item-to-item collaborative filtering is extrem einfach zu implementieren, und kann sogar ammortisiert berechnet werden. Mit dem Paper [1] hab' ich sehr gute erfahrungen gemacht :)

[1] https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.60.5905&rep=rep1&type=pdf

Danke, einen Algorithmus habe ich allerdings schon (Rating Frequencies).

die frage für mich ist, wie sieht die struktur der DB und wie die Query's aus?

Tabellenstruktur:
https://nopaste.info/62e8a32246.html

Queries:
https://nopaste.info/21cc48fa9e.html

Gruß Carny
 
die Querys schonmal über die Kommandozeile oder phpMyAdmin ausgeführt um zu sehen, wie lange es dauert?
Schonmal einen PHP-Debugger genutzt (echo Statements?) um zu sehen bis wohin der Aufruf kommt und wo er scheinbar hängen bleibt?

Ich würde ja meine Hand dafür ins Feuer legen, dass es der 3. Query ist, denn für den Join mit dem Tabellenalias l gibt es keinen Index um die Bedingung effizient aufzulösen. Es fehlt ein Index auf item_id1 oder category.
 
also:

bitte hier nochmals nachlesen:

https://dev.mysql.com/doc/refman/5.5/en/partitioning-limitations-partitioning-keys-unique-keys.html

ja es geht erst ab mysql version 5.5

Tabelle vogoo_links fehlt, aber wird laut Query genutzt : " SELECT l.item_id2,sum(l.cnt * (r.rating - 0.66)) as cnter
FROM vogoo_links l,vogoo_ratings r ..."

bitte immer alles vollständig angeben

und "... AND l.category=r.category
AND r.category = 1 ..." ist irgendwie sinnlos ?

weil AND l.category = 1 das gleiche bewirkt und kürzer ist

also das letzte Query sieht mir nicht ganz koscha aus.
Naja alle Infos sind ja nicht verfügbar, aber das erstmal von mir dazu...