Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Optymalizacja zapisywania danych do bazy danych przez AJAX, Odpisze ktoś mądry?
rugby
post
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 1
Dołączył: 21.05.2009

Ostrzeżenie: (0%)
-----


Tworzę aplikację RIA, która działa w przeglądarce po stronie klienta i co jakiś czas zapisuje dane (np. położenie paneli) w wybranej tabeli w bazie danych, wysyłając je metodą POST przez AJAX. Biorąc pod uwagę, że równocześnie z aplikacji może korzystać kilkaset osób, jak zoptymalizować wydajność serwera WWW i bazy danych?

1. Tabela, do której zapisywane są dane, powinna mieć blokowanie na poziomie wiersza (a nie całej tabeli), zgadza się?
2. Trzeba zachować kolejność zapisywania, żeby pakiet, który został wysłany wcześniej, a dotarł później, nie nadpisał pakietu wysłanego w międzyczasie, tak?
3. Czy wywoływać zapis danych metodą POST w momencie zmiany położenia paneli (ludzie mogą bawić się panelami, generując dużo zapisów w jednym czasie), czy np. co 5 s. (niezależnie od tego czy użytkownik rusza panele są generowane zapisy)?
4. Na co jeszcze zwrócić uwagę?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Zacznijmy od tego, czy POST rzeczywiście jest Ci tutaj potrzebny. Najprostszy GET wystarczy, nawet wywoływany przez fikcyjny obrazek.

Cytat
3. Czy wywoływać zapis danych metodą POST w momencie zmiany położenia paneli (ludzie mogą bawić się panelami, generując dużo zapisów w jednym czasie), czy np. co 5 s. (niezależnie od tego czy użytkownik rusza panele są generowane zapisy)?

Ja bym to zrobił inaczej: user zaczyna się bawić i odpalasz stoper (setTimeout). Jeśli w ciągu tych np. 5 sekund znowu poruszy, resetujesz stoper. I jeśli przestanie się bawić -> wówczas stoper się wykona, Ty zapisujesz dane do bazy i czekasz na kolejny ruch.

I teraz co i po co:
  • stoper: umożliwia zareagowanie na chwilową przerwę w zabawie widgetami; czas opóźnienia musisz dobrać wg testów
  • zerowanie - jeśli znowu zacznie się bawić, wtedy na czas drag'n'dropa zamrażasz odliczanie i czekasz aż przestanie się bawić
  • ondrop znowu start stopera i jeśli nie będzie się bawił, wtedy możesz spokojnie zapisać na serwerze

I teraz sprawa po stronie serwera: jeśli obciążenie jest naprawdę duże - zrób plik log-transakcyjny zamiast bezpośredniego zapisu do bazy.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 11:40