Optimere advanceret update kald
HejJeg står og skal lave en update, jeg starter lige med lidt forklaring og baggrundsinfo.
Databasen kører ca. 50.000 inserts om dagen, som "løber ud" en gang i timen. Disse inserts sættes ind løbende over hele dagen, hver gang en side besøges.
Hver af de 50.000 har 3 forskellige variabler der bliver trukket ud (3 tal af forskellig størrelse).
Disse 3 tal skal så sættes ind i et ukendt antal rækker der allerede ligger i databasen, jeg skriver ukendt, da det kan variere meget.
Men lad os for nemheds skyld sige 10 rækker.
Altså der skal i alt køres 50.000 x 10 = 500.000 updates om dagen.
Jeg har kigget på flere forskellige måder at gøre dette på, for at belaste serveren mindst muligt. Har fået det ned på disse to muligheder.
1) hver gang en ny insert sættes ind, tjekker systemet om der findes nogle der er for gamle og kører updates på dem.
2) systemet ser efter gamle inserts hver 15. min, 30. min eller hver time.
-----
Når systemet har fundet nogle der er for gamle kører jeg en mysql_fetch_assoc på dem, og sorterer dem efter værdi, for ikke at køre den samme update to gange. Dette gøres i arrays.
Herefter skal de sættes ind i databasen, da jeg ikke vil køre 500.000 seperate updates om dagen vil jeg køre det vha.
mysql_query("update data set felt1=CASE when bla then blabla END, felt2=CASE when bla then blabla END, felt3=CASE when bla then blabla END WHERE ID IN ('en masse ider')")
Disse CASE statements kan blive rigtig lange.
Her kommer spørgsmålet så, findes der en mere optimalt måde at gøre det på? Og belaster en CASE statement systemet meget, eller er det ikke et problem at køre sådan en med f.eks. 500 muligheder den skal tage højde for.
Hvordan løses sådan et problem bedst?
Jeg håber det giver nogenlunde mening det jeg skriver.
