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 (1 - 4)
melkorm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


Może niemądry, ale napiszę co przyszło mi na myśl:
- Onbeforeunload - tutaj pojawia się pytanie jakie dokładnie chcesz przeglądarki obsługiwać, też by się przydało np: na wylogowanie + nie aktywność przez x - sekund i tylko wtedy gdy pozycje się zmieniły.
- Także trzeba rozpatrzeć czy naprawdę będziesz miał tyle user'ów że będzie to generować AŻ takie obciążenie, lub czy by na początek ni zrobić tego normalnie na AJAX'sie i później zobaczyć czy jest potrzeba przerabiania na bardziej wydajne rozwiązanie.
Go to the top of the page
+Quote Post
thek
post
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Ustaw by ów AJAX działał tylko przy określonych zdarzeniach, lub określonym czasie. Nie ma sensu co chwilę wywoływać wysyłki. Zrób tak, że AJAX wywołuje się na chwilę przed zamknięciem okna, na chwilę przed opuszczeniem strony (ktoś może przypadkowo kliknąć jakiś link), na puszczenie w drag&drop. Każde z nich niech tworzy znacznik czasowy(czy tam setInterval). Ileś minut po owym znaczniku wywołuje się zapis automatyczny i ustawia on następny punkt zapisu w przyszłości. W ten sposób zapisy automatyczne nie będą (a przynajmniej nie powinny) ze sobą kolidować
Go to the top of the page
+Quote Post
erix
post
Post #4





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
cojack
post
Post #5





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


A ja polecam książkę Head First AJAX.

Ten post edytował cojack 22.07.2010, 20:06:34
Go to the top of the page
+Quote Post

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: 25.12.2025 - 18:24