Avatar billede intenz Novice
21. september 2006 - 19:46 Der er 1 løsning

Optimere advanceret update kald

Hej

Jeg 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.
Avatar billede intenz Novice
22. september 2006 - 12:33 #1
fundet en ny løsning. luk
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester