2012-02-19 12 views
9

Chcę opracować złożoną grę z potencjalnie tysiącami funkcji i połączeń z bazą danych.Synchroniczny kontra asynchroniczny dostęp do bazy danych

Zastanawiam się, czy naprawdę konieczne jest wykonywanie zapytań do bazy danych w asynchronizacji. Jest to trudny do zakodowania, a wszystkie moje funkcje będą musiały używać wywołań zwrotnych zamiast czystej metody return. Czy to normalne podejście?

Czy kodowanie tych wywołań w async naprawdę trwa znacznie szybciej, biorąc pod uwagę, że baza danych MySQL przetwarza pojedyncze zapytanie na raz?

+0

"Baza danych MySQL przetwarza pojedyncze zapytanie naraz" - dla połączenia. Mysql spawnuje nowy wątek dla każdego połączenia, mając co najmniej tyle połączeń, ile liczba rdzeni na mysql boxie powinna zwiększyć wydajność. –

+1

Dlaczego warto rozważyć opcję node.js, jeśli nie sprzedaje się cnót asynchronicznego programowania? Upewnij się, że nie jesteś tylko kolejnym fanboyem bez uzasadnionego powodu, zobacz wideo http://www.youtube.ug/watch?v=bzkRVzciAZg –

Odpowiedz

11

Chyba że coś się zmieniło drastycznie w Node.JS niedawno, jesteś dość dużo zmuszony do korzystania z dostępu do bazy danych asynchroniczny skalować dobrze ponieważ wszystkie swoich żądań użytkownika wykona na one single thread i synchronicznie czekając na bazie będzie naprawdę spaść wydajność . Jeśli jeden użytkownik wykonuje powolną operację, wszyscy pozostali użytkownicy będą musieli poczekać, aż to zrobi.

Węzeł Node.JS jest zbudowany na potrzeby przepływu zdarzeń asynchronicznych, dzięki czemu praca z nim jest znacznie lepsza niż praca z nim.

0

Prędkość silnika bazy danych + czasy transmisji będą prawie takie same. Problem polega na tym, że połączenia asynchroniczne nie blokują dzwoniącego. Tak więc asynchroniczny łuk jest sposobem na uzyskanie dowolnych systemów "działających w czasie rzeczywistym", które wymagają dużej reakcji na inne wejścia. (Takich jak gry, które zawsze powinny być bardzo wrażliwe na człowieka.)

1

Zapytania będą umieszczane w kolejce na poziomie bazy danych w MySQL. Istnieje wiele innych opcji, jeśli możesz myśleć o używaniu DB Mongo dla niektórych danych.

3

Asynchroniczne żądanie nie jest szybsze niż synchroniczne, niezależnie od tego, jak je wykonujesz, nadal robią dokładnie to samo. Jedyne, co się zmienia, to raczej blokujesz na żądanie, czy nie.

Po uruchomieniu synchronicznej metody, która spowodowała, że ​​żądanie zatrzyma jego wykonanie, czekając na zwrot żądania, dopiero po przejściu przez niego będzie kontynuował wykonywanie. Chociaż przy korzystaniu z asynchronicznego żądania, nie trzeba czekać na zakończenie żądania, możesz trzymać się dalej, a kiedy to zrobi, zostanie wywołane wywołanie zwrotne.

Inną rzeczą jest to, że zazwyczaj baza danych jest wąskim gardłem, gdy aplikacja wykonuje wiele wywołań do dbms, z tego powodu warto rozważyć użycie przychodzącego rodzaju buforowania w celu zmniejszenia obciążenia z DBMS.

1

Podobnie jak Nitzan, musisz wiedzieć, że "żądania asynchroniczne nie są szybsze niż synchroniczne, bez względu na to, jak je wykonujesz, wciąż robią dokładnie to samo."

Nikt nie mówił o, ale jeśli istnieje wielu użytkowników i wiele wniosków, masz inne rozwiązania mające na celu ograniczenie dostępu do bazy danych:

tworzenia plików cache

i aktualizować je przez użytkowników działania lub zadania CRON.

  • Użytkownicy informacje
  • Użytkownicy alarmy
  • Użytkownicy działania
  • Użytkownicy asortyment ...

Zaopatrzony proces bazie

Dla niektórych powtarzających się wniosków można zaopatrzyć je w MySQL. Te będą wykonywane szybciej niż żądanie użytkownika.

Powiązane problemy