Ik heb een script dat bezoekers die daarheen komen automatisch naar een andere site wordt gestuurd (een soort roteerscript). Snelheid is van grootste belang met dit script. Dit roteerscript moet een website uit de database kiezen op de volgende gegevens:
1) Random
2) Prioriteit van de website om geladen te worden.
3) Landgericht (de site in de database kan bezoekers van meerdere lanten accepteren)
Aangezien eerst alleen voorwaarde 1 gold had ik het volgende in de query:
Dat werkte perfect om een random rij terug te krijgen. Maar aangezien er nu nog 2 extra selectgegevens bij komen weet ik niet hoe ik het beste kan doen. Ik heb wel een aantal "ideetjes", maar weet niet of ze handig zijn. Ideetjes voor country check:
- landen in apparte tabel gekoppeld met een left join op basis van site_id als het ware (elk land 1 record). Maar met bijv. 150 landen, kost dat veel kracht en is dat dus langzaam?
- de landen serializen in de tabel, alle data uitlezen en in array proppen, unserializen, check doen, klaar
- is er een efficientere oplossing?
Voor de prioriteiten. Ik weet niet precies wat de handigste manier is, maar ik zat zelf te denken dat ik een veld kan maken waarin staat hoe vaak een site geladen moet worden (bijv. 5x zo vaak als standaard wat 1x is, soort selectbox met 2,3,4,5 etc. x normale hoeveelheid). Elke keer als een site geladen is wordt de status opgeteld. Op die manier gaat het script alle records af tot ze allemaal het aantal keer geladen zijn, en dan wordt alles weer naar 0 gezet. Zo krijg je ook een totaal random systeem, maar ook hierbij geldt dat ik niet weet hoeveel snelheid dit kost. Je hebt immers bij elke handeling weer een extra update en zo nu en dan een update van alle records (naar 0). Daarbij vraag ik me af wat er gebeurt wanneer alle sites naar 0 worden gezet, en op dat moment nog 100 andere bezoekers het script opvragen en misschien de query van de reset naar 0 nog niet volledig is uitgevoerd. Is dat een reëel gevaar?
1) Random
2) Prioriteit van de website om geladen te worden.
3) Landgericht (de site in de database kan bezoekers van meerdere lanten accepteren)
Aangezien eerst alleen voorwaarde 1 gold had ik het volgende in de query:
PHP:
1
2
3
4
| ORDER BY rand() LIMIT 1 |
Dat werkte perfect om een random rij terug te krijgen. Maar aangezien er nu nog 2 extra selectgegevens bij komen weet ik niet hoe ik het beste kan doen. Ik heb wel een aantal "ideetjes", maar weet niet of ze handig zijn. Ideetjes voor country check:
- landen in apparte tabel gekoppeld met een left join op basis van site_id als het ware (elk land 1 record). Maar met bijv. 150 landen, kost dat veel kracht en is dat dus langzaam?
- de landen serializen in de tabel, alle data uitlezen en in array proppen, unserializen, check doen, klaar
- is er een efficientere oplossing?
Voor de prioriteiten. Ik weet niet precies wat de handigste manier is, maar ik zat zelf te denken dat ik een veld kan maken waarin staat hoe vaak een site geladen moet worden (bijv. 5x zo vaak als standaard wat 1x is, soort selectbox met 2,3,4,5 etc. x normale hoeveelheid). Elke keer als een site geladen is wordt de status opgeteld. Op die manier gaat het script alle records af tot ze allemaal het aantal keer geladen zijn, en dan wordt alles weer naar 0 gezet. Zo krijg je ook een totaal random systeem, maar ook hierbij geldt dat ik niet weet hoeveel snelheid dit kost. Je hebt immers bij elke handeling weer een extra update en zo nu en dan een update van alle records (naar 0). Daarbij vraag ik me af wat er gebeurt wanneer alle sites naar 0 worden gezet, en op dat moment nog 100 andere bezoekers het script opvragen en misschien de query van de reset naar 0 nog niet volledig is uitgevoerd. Is dat een reëel gevaar?