Ik zit met een IP-to-ID probleem. Ik heb grote log-files (4000 regels per dag), en die wil ik korter in een database proppen. In die database moet echter geen IP komen te staan, maar een ID. In de tabel hosts staan de IP(-mask)s + tijden van welke ID welke IP had:
De logbestanden worden ongeveer zo aangeleverd:
Log-bestanden
date
ip
hits
Wat de PHP dus moet doen:
Logbestand openen
IP eruit vissen
Vervangen door de desbetreffende ID (als die niet gedefinieerd is ID 0)
In de DB proppen
Dit kan ik doen met een lang loopje per regel, maar zoals ik al zei: de logbestanden zijn zo'n 4000 regels per dág, en het gaat al om een jaar of 2 aan logbestanden. Ik ben dus erg hard op zoek naar een beter algoritme, maar zou niet meer weten hoe ik de data uit de logfiles snél controleer..
PS: De IP's zijn opgedeeld in 4 stukken (TINYINT UNSIGNED), zodat ik dubbele IP's kan vangen: SELECT * from hosts order by ip4 desc, ip3 desc, ip2 desc, ip1, desc; Dan krijg ik het in de goeie volgorde terug: Degene met de eerste match is het specifiekste; als er een entry bestaat voor 192.168.0.2 komt die boven de entry 192.168.0.null te staan.
Ik hoop dat deze zut een beetje duidelijk is, anders wil ik het graag herformuleren
Thenkz!
code:
1
2
3
4
5
6
7
8
| Hosts data * id * id * ip1 * date * ip2 * hits * ip3 * ip4 * startdate * enddate |
De logbestanden worden ongeveer zo aangeleverd:
Log-bestanden
date
ip
hits
Wat de PHP dus moet doen:
Logbestand openen
IP eruit vissen
Vervangen door de desbetreffende ID (als die niet gedefinieerd is ID 0)
In de DB proppen
Dit kan ik doen met een lang loopje per regel, maar zoals ik al zei: de logbestanden zijn zo'n 4000 regels per dág, en het gaat al om een jaar of 2 aan logbestanden. Ik ben dus erg hard op zoek naar een beter algoritme, maar zou niet meer weten hoe ik de data uit de logfiles snél controleer..
PS: De IP's zijn opgedeeld in 4 stukken (TINYINT UNSIGNED), zodat ik dubbele IP's kan vangen: SELECT * from hosts order by ip4 desc, ip3 desc, ip2 desc, ip1, desc; Dan krijg ik het in de goeie volgorde terug: Degene met de eerste match is het specifiekste; als er een entry bestaat voor 192.168.0.2 komt die boven de entry 192.168.0.null te staan.
Ik hoop dat deze zut een beetje duidelijk is, anders wil ik het graag herformuleren