Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Relacje L!ve - problem z wydajnościa
Forum PHP.pl > Forum > PHP
marins
Witam,

napisałem autorski skrypt do relacji live.

Zaczynałem do 50 osób online potem, 200, 1000 i ostatnio 2650. I tutaj pojawił się problem - mój serwer nie daje rady - ale jest to spowodowane złą optymalizacją skryptu PHP.

Live dzieli się na front i admin.

Admin - działa na mysql i końcowe dane zapisuje do pliku txt.

Front - do tej pory łączył się z bazą robił insert, bądź update na podstawie session_id i na końcu zwracał sumę wyników z ostatnich 10 minut.

ale było to 2650 połączeń i zapytań do bazy w ciągu 5 minut ... co nam daje 9 połączeń na 1s.

Przerobiłem ostatnio licznik online na tekstowy:
1. otwieram plik szuka rekordu foreach'em jak jest to update, jak nie ma to dodaje. zamykam plik
2. otwiera ten sam plik i zlicza stan osob online - zwraca wynik

Przed tym wszystkim otwieram jeszcze plik z danymi do relacji.

Czy jest to dobra zmiana która pozwoli mi na obsługę 4-5 tys osob? Czy jest to najbardziej optymalny sposób?

Dodam tylko, że licznik online jest niezbędny.
erix
Cytat
Dodam tylko, że licznik online jest niezbędny.

Tabela memory z ostatnią aktywnością i update po indeksie char (SID). Wtedy wyciąganie liczby będzie bajką, zarówno z powodu łatwości, jak i prędkości. winksmiley.jpg

Cytat
Przerobiłem ostatnio licznik online na tekstowy:

Ok, ale każde odświeżenie będzie powodowało blokadę, w której reszta będzie musiała czekać.

Cytat
Przed tym wszystkim otwieram jeszcze plik z danymi do relacji.

A nie masz dostępu do memcached? Przy takiej ilości użytkowników właściwie staje się on niezbędny.
marins
Cytat(erix @ 26.02.2010, 11:17:01 ) *
Tabela memory z ostatnią aktywnością i update po indeksie char (SID). Wtedy wyciąganie liczby będzie bajką, zarówno z powodu łatwości, jak i prędkości. winksmiley.jpg


Cytat(erix @ 26.02.2010, 11:17:01 ) *
Ok, ale każde odświeżenie będzie powodowało blokadę, w której reszta będzie musiała czekać.


Czyli rozumiem, że w tym wypadku mysql jest niezbędny? ewentualnie procedura w SQL.

Nie ma innej metody? - bo rzeczywiście z tymi plikami to może być krucho, a nie chcę za bardzo z tym sql.

Cytat(erix @ 26.02.2010, 11:17:01 ) *
A nie masz dostępu do memcached? Przy takiej ilości użytkowników właściwie staje się on niezbędny.

Plik z całą relacją jest w txt. potem js go przerabia. problem tkwi własnie tylko w dograniu liczby osob on-line

ewentualnie moge zapisywac sesje po stronie fronta.

obliczenia robić po stronie admina i doklejać do pliku txt z relacją.
erix
Największym problemem jest tu jednoczesne otwieranie N-tysięcy razy jednego pliku.

Cytat
Nie ma innej metody? - bo rzeczywiście z tymi plikami to może być krucho, a nie chcę za bardzo z tym sql.

Podaj choć jeden racjonalny argument. Przy serwisie o takiej skali SQL nie jest niczym dziwnym. winksmiley.jpg

Cytat
ewentualnie moge zapisywac sesje po stronie fronta.

?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.