26. december 2008 - 00:00Der er
3 kommentarer og 1 løsning
Mange rækker - Hvad gør jeg?
Hej
Jeg står overfor at skulle launche en ny kæmpeportal, hvori der skal være et cronjob der kører 5 gange om dagen.
Det cronjob tjekker nogle ting på hver række i en database, og derfor vælger jeg at det skal køre 5 gange om dagen, for at fordele tjekket over flere gange (så i stedet for at tage 500 rækker på en gang, tager den 100 rækker 5 gange om dagen).
Til det skal jeg fortælle mit cronjob at den kun skal tage de rækker på det tidspunkt, og nogle andre rækker på et andet tidspunkt.
Jeg har derfor tænkt mig at give hver række et unikt ID, hvor det første cronjob tjekker ID 1, det næste ID 2 osv. osv.
Ved dog ikke om det ville være det mest hensigtsmæssige - hvad synes i? Er der andre måder at gøre på?
Ville en yderligere optimering være at fordele rækkerne ud på forskellige databaser? Eller er det overkill?
og så kunne du sørge for at lade den tjekke de første rækker, der IKKE var sat editedtoday="yes" på.. og dermed bruge "$num_rows_div_5"; som limit.. altså vil den nye MYSQL query blive noget ala:
mysql_query("SELECT felt, editedtoday FROM tabel WHERE editedtoday != "yes" ORDER BY id DESC LIMIT ".$num_rows_div_5.") while($data = mysql_fetch_array($foresp)){
mysql_query("UPDATE tabel SET editedtoday = 'yes' WHERE id = '".$data[id]."' LIMIT 1") or die(mysql_error());
}
Det skulle da virke - medmindre der kan ske at blive tilføjet nye forekomster i løbet af dagen? så skal du måske tilføje noget der tjekker om datoen < i dag .. og hvis den ikk er skal der ikke ændres?
Regner med 500 poster efter en uge. Så det var bare et eksempel. Kan hurtigt komme op på 100-500k poster.
Min server burde kunne trække det databasemæssige (en dedikeret server med 2x 3,2 quadcore intel xeon, 16 GB ram, 4x250 10.000 RPM harddiske), tænker bare på belastningen (og time-out) hvis der skulle scannes for 200.000 poster på en gang.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.