Ik wil om spem en ander gezeik tegen te gaan eigenlijk alle sporen van de bezoeker opslaan, dus ik dacht om elke pagina die hij of zei opent, in een tabel in de db te zetten, met datetime en ip, maar wordt de site hier niet erg sloom van? of kan hij wel met gemak allemaal records toevoegen aan de database?
Op zich blijft het tot ongeveer 50 miljoen records op een gemiddeld PC'tje wel snel. Hangt van een paar dingen af. MySQL is niet zo snel met INSERT (wel met SELECT), en zeker niet als er een INDEX op de column staat. Dus misschien ligt je limiet eerder op een miljoen voor goede snelheid. Hangt van je servers af, van je bezoekersaantal en van de dingen die je precies logt en de datatypes.
Ik denk dat je server dat gemakkelijk aankan zo één query meer. Maar waarom zou je ELKE pagina op laten vragen. Je DB gaat onnodig groot worden. Stel dat je 5000 bezoekers per dag krijgt? Ik vind het een beetje 'dom' om daar je DB mee vol te steken :s ?
Ik dacht aan zoiets:
| user | pagina | ip |
| int(10) | int(10) | varchar(15) |
Wat is een index eigenlijk? gebruik ik zelf nooit...
[edit]
Ik verwacht niet meer dan 100 bezoekers per dag, en nadat ik heb meegemaakt dat ik ongeveer met de dood bedreigt ben, wil ik zoveel mogelijk loggen (nou, bedreigt valt wel mee, maar mensen wensen wel gewoon toe dat ik dood ben etc...)...
[/edit]
Een index moet je zien zoals in een boek. De database houdt iets bij waardoor hij daarin razendsnel kan zoeken. Als je een paar honder duizend records hebt scheelt dit al factor 1000 tot 1.000.000. Dus dat is erg erg handig. Zonder indexes kun je nooit een grote database maken eigenlijk, want dan ben je minuten bezig om je data op te vragen.
int(10) vind ik wat overdreven. Ik zou een 4-byte integer gebruiken.
IP zou ik als int opslaan aangezien dit veel minder bytes kost (dan moet je dus wel de puntjes effe er uithalen en er misschien wat nullen tussen zetten).
Elk karakter in een varchar is namelijk (minimaal) een byte. Maar, met 1 byte kun je integers van 0 tot 255 aanduiden. Met 2 bytes kun je al 255 * 255 (of was het 256 * 256?) getallen aanduiden. Dat is dus veel efficienter.
Het uitvoeren van 1 INSERT-query heeft nauwelijks invloed op de snelheid van jouw website. Wanneer je echter deze berg gegevens weer gaat opvragen, dan zal dat zeker een grote invloed hebben, ga daar dus spaarzaam mee om.
index = inhoudsopgave. Hiermee kun je de snelheid van de database enorm verhogen, een factor 1000 is zo maar mogelijk. Dit ligt echter wel aan de manier waarop de data is opgeslagen, hoe complex het datamodel is, etc. etc. Het op een goede manier gebruiken van indexen, is niet eenvoudig. En doe je verkeerd, dan kun je zelfs de snelheid omlaag halen... Hoge school database beheer.
Binnen MySQL zijn de mogelijkheden echter nogal beperkt, per query kun je slechts 1 index gebruiken.
... en nadat ik heb meegemaakt dat ik ongeveer met de dood bedreigt ben, wil ik zoveel mogelijk loggen (nou, bedreigt valt wel mee, maar mensen wensen wel gewoon toe dat ik dood ben etc...)...
En daarom ga jij de database aanpassen? Ga je toch vooral niet druk maken om dit soort geblaat van een paar primaten. Af en toe moet je gewoon even een bord voor je hoofd zetten! Jij kunt er toch niets aan doen dat zij niet intelligenter zijn... Even een cpu-upgrade of wat extra geheugen er bij plaatsen zit er echt niet in! ;)
Zet een scheldwoorden-filter op je site en dit soort onzin komt niet eens meer in de database terecht. Probleem opgelost.
Maar moet ik dus niets loggen? Ik heb er bijvoorbeeld hele veel aan gehad dat ik het ip-adres van diegene had, want nu weet ik wel wie het gedaan heeft.
[edit]En daarom ga jij de database aanpassen?[/edit]
nee, ben bezig met v2.0, wordt alles aangepast, db dus sowieso.
[edit]Jij kunt er toch niets aan doen dat zij niet intelligenter zijn...[/edit]
Tja, eigenlijk is het gewoon jaloezie...