Posiadam grę w pokera na iPhone'a z wieloma grami działającymi w tym samym czasie. Jestem w trakcie optymalizacji kodu, ponieważ zarówno ja, jak i serwer rozbiliśmy dzisiaj.1.3M zapytań/godzinę. Jak skonstruowałbyś zapytania?
Jest to konfiguracja:
Teraz mam jedną tabelę, „pasuje” (70 pól danych dla każdego wiersza konstrukcji.), Że śledzenie wszystkich aktywnych meczów. Co 7 sekund iphone się połączy, pobierze wszystkie mecze z tabeli "mecze", w której jest aktywny, i zaktualizuje interfejs użytkownika w telefonie iPhone.
To działało świetnie, aż około 1000 osób pobrało grę i zagrali. Serwer się zawiesił.
Aby zoptymalizować, wyobrażam sobie, że mogę utworzyć nową tabelę o nazwie "matches_needs_update". Ta tabela ma 2 rzędy; imię i nazwisko. "Identyfikator" jest taki sam jak mecz w tabeli "mecze". Gdy mecz jest aktualizowany, jest umieszczany w tej tabeli.
Teraz, zamiast przeszukiwać cały stół "mecze", zapytanie wystarczy sprawdzić, czy gracz ma jakieś mecze, które wymagają aktualizacji, a następnie uzyskać te mecze z tabeli "mecze".
Moje pytanie jest dwojaki:
- Jest to optymalne rozwiązanie?
Jeśli gracz jest aktywny, powiedzmy 10 meczów, czy istnieje dobry sposób na uzyskanie tych 10 meczów z tabeli "mecze" w tym samym czasie, czy też potrzebuję pętli for wykonującej 10 zapytań, po jednym dla każdego mecz:
"WYBIERZ * Z GESTÓW WHERE id =?"
Dzięki z góry
Podczas gdy problem jest poważny, jest to jeden z najlepszych rodzajów problemów, jakie możesz mieć, jeśli myślisz o tym. Zawieszenie się ze zbyt wielu rzeczywistych użytkowników jest najlepszym rodzajem awarii. – Cyclone
Rozwiązanie korzystające z powiadomień wypychanych może być lepszym sposobem na obejście problemu z wydajnością. W ten sposób nie będziesz mieć zbyt wielu nadmiarowych czeków na zmianę –
To brzmi prawie tak, jakby jedna osoba mogła być aktywna w wielu meczach, a wiele osób może być aktywnych w 1 meczu? Z pewnością musisz mieć 3 stoły? – DanRedux