Hallo,
ich habe ein kleines (Verständnis-)Problem:
Ich habe eine Tabelle, in der ca. 9 Millionen Datensätze drin sind, entspricht etwas über 4GB Daten.
In dieser Tabelle sind Logs gespeichert.
Um nun einen Visit zu berechnen, muß ich durch die Tabelle durchlaufen und in die richtige Reihenfolge bringen:
...order by ip, datum, zeit, .....
Das mache ich so:
while (@hitdata = $hits->fetchrow_array)
{
Visitgrenze feststellen....
}
"Visitgrenze feststellen....":
Ich merke mir wichtige Werte wie IP usw.
Wenn ein neuer Wert auftaucht, so liegt ein neuer Visit vor, der alte gilt als abgeschlossen.
Aber das nur am Rande.
Nun das Problem an sich:
Mein Rechner hat nur 512MB. Der rödelt da stundenlang rum und sollte, wenn fertig, die Ergebnisse in einer anderen Tabelle speichern. Aber mittendrin bricht er ab. Ich weiß aber nicht, ob es einen Timeout gegeben hat oder der Speicher nicht reicht (die Platte hat noch genug Reserven!).
Nun bin ich hingegangen und habe das so umgebaut, daß ich mit limit arbeite, d.h. "limit $a, 10000" anwende und in einer Schleife die Funktion mit Parameter für $a aufrufe. Die Schleife erhöht $a dann immer um 10000.
Die Frage ist, ob es nicht anders geht, d.h. ob ich in der my.cnf irgendwas drehen muß/kann, was dann eine Berechnung ohne limit ermöglicht.
Laut meinem MySQL-Buch und der online-Doku. sollte ich mich darum nicht unbedingt kümmern müssen, weil MySQL selbständig swappt (,falls es ein Speicherproblem sein sollte).
Kann mir jemand einen Tipp geben?
Harry