Avatar billede mantichora Nybegynder
28. marts 2007 - 18:26 Der er 7 kommentarer og
1 løsning

For mange MySQL kald i chat

Okay, jeg har en chat.

Hver gang en bruger skriver noget, køres der 3 SQL kald:
En select for at se om brugeren findes og er aktiv,
en insert for at indsætte beskeden i tabellen messages, og
en update for at opdatere tidspunktet for hans sidste besked i tabellen online_users

Når en bruger henter nye beskeder, hvilket sker hvert 10. sekund, køres der flere SQL kald:
En select for at hente alle idlere, der ikke har skrevet i 15 minutter,
en update for at sætte deres is_active til 0,
en insert FOR HVER for at skrive en "x er logget ud" besked i messages, og
en select for at hente alle nye beskeder og udskrive dem.


Det er jo en sindssyg mængde SQL kald. Bare jeg har 10 brugere der skriver hvert 10. sekund, vil jeg have over 5 kald i sekundet, og så vidt jeg har læst er 1 SQL kald per sekund det mest almindelige for den slags.

Mit problem er at jeg ikke ANER hvordan jeg får tallet ned.
Kan det gøres via avanceret SQL, eller har nogen andre idéer?
Avatar billede mixeren Nybegynder
29. marts 2007 - 03:24 #1
Alt det her:
En select for at hente alle idlere, der ikke har skrevet i 15 minutter,
en update for at sætte deres is_active til 0,
en insert FOR HVER for at skrive en "x er logget ud" besked i messages

Behøves jo ikke blive kørt hver gang du henter nye beskeder. Hvis du smider det i en skjult iframe (eller lignenede) så kan du nøjes med at køre det med det interval du ønsker, f.eks. hver 5 minut.
Avatar billede mixeren Nybegynder
29. marts 2007 - 03:30 #2
Endnu bedre vil det være hvis du har adgang til at køre cron job, så kan du oprette sådan et til alt "veligehold" så bliver det kun kørt 1 gang i hvert interval modsat 1 gang pr. bruger i hvert interval.
Avatar billede mantichora Nybegynder
29. marts 2007 - 10:55 #3
Ja, det kunne sagtens flyttes og køres lidt sjældnere. Men igen - det er jo faktisk kun ét SQL-kald, da de to sidste kun køres HVIS der er idlere, hvilket der jo i sagens natur ikke er flere gange i sekundet.

Ét mindre SQL-kald, men det er jo en dråbe i havet desværre :/
Tak anyway.
Avatar billede mantichora Nybegynder
29. marts 2007 - 10:58 #4
Bruger andre chats virkelig så mange SQL-kald?
Altså, det er første gang jeg skriver en, så jeg har sådan set ikke forstand på det. Jeg syntes bare det lød helt vildt.

Plus jeg så at powweb.com (ikke at jeg vil bruge dem, det var bare det eneste sted jeg kunne finde info om det) har en MAX_QUERIES ting sat til 72.000 per time. Højt tal skulle man umiddelbart mene, men hvis det er normalt, vil jeg kun kunne servicere højst 5-10 brugere. Det er jo slet slet ikke nok.
Avatar billede mixeren Nybegynder
29. marts 2007 - 14:20 #5
En chat kræver mange kald til databasen, dem der er gode til at lave chats (det er jeg ikke) benytter så vidt jeg har hørt AJAX, og hvis jeg har forstået det rigtig er det bla. for at begrænse mængden af kald til databasen.

Selvfølgelig at det med at være på den sikre side, men jeg syntes måske nok at det er lidt overdreven at brugerne skulle skrive en ny besked hver 10 sek.
Avatar billede mantichora Nybegynder
29. marts 2007 - 15:44 #6
Det *er* lavet i AJAX. Og den fungerer også fint, jeg syntes bare antallet af kald lød overdrevent.

Men der er åbenbart ikke andre der har input, så smid du bare et svar :)
Tak for at du gad.
Avatar billede mixeren Nybegynder
29. marts 2007 - 16:05 #7
Det var så lidt, samler ikke på point, så snup dem selv. :-)

Om det er overdreven, kan jeg nok ikke vurdere, men jeg kan da sammenligne med med min server (som godt nok ikke køre nogen fast hårdt belastet chat). Den har et gennemsnit over på 26 opslag i sek., og alligevel ligger belastningen på selve maskinen på max 10-15%

De fleste alm. webhoteller tillader vist ikke scripts som reloader med et fast interval, så hvis du på et tidspunkt alligevel skal ud og kikke på dedikeret server, så har du jo masse af computerkraft til at trække selv ret mange brugere.
Avatar billede mantichora Nybegynder
03. april 2007 - 11:31 #8
Tak alligevel :) Jeg har lige skrevet til et par webhoteller og spurgt om de havde regler mht. den slags, og det havde de ikke, så det er fint.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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