Ostatni raz o Pulsar Online pisałem ponad miesiąc temu. W tym czasie udało mi się ‘pchnąć’ prace do przodu i uruchomić działającą wersję dostępną dla graczy. Od miesiąca trwają testy dla wybranej grupy graczy, dziś startują testy otwarte.
Trzy słowa o grze. W Pulsar Online to gra przeglądarkowa typu MMORPG w której wcielasz się pilota statku kosmicznego i zostajesz przeniesiony do wszechświata Pulsar. Wszechświat jest podzielony na systemy, a systemy na sektory. W systemach znajduję się sektory różnych typów (asteroidy, mgławica, itp.) różniące się parametrami oraz zasobami jakie w nich występują. Oprócz tego, w systemach są ulokowane stacje i porty kosmiczne. Gracz ma możliwość poruszania się wewnątrz systemów jak i pomiędzy nimi (używając Wrót Skoku), dokowania do portów i stacji, kupna i sprzedaży towarów, zbierania zasobów z przestrzeni kosmicznej. Dzięki handlowi i zbieractwu można kupować lepsze statki, wyposażenie i uzbrojenie. Posiadając odpowiedni statek można walczyć z innymi graczami.
Na chwilę obecną zaimplementowane są następujące mechanizmy:
poruszanie się po świecie gry
handel
zbieractwo
podstawowa komunikacja pomiędzy graczami
zarządzanie statkiem (uzbrojenie i wyposażenie)
podstawowy model walki (jeden na jeden) , bez kary za przegraną walkę
W najbliższym czasie udostępniona zostanie kolejna wersja gry rozszerzająca model walki o:
walka wielu statków na raz
nowe uzbrojenie i wyposażenie
walka ze statkami sterowanymi przez komputer (NPC)
Gra nie posiada jeszcze instrukcji obsługi. Na pytania mogę odpowiadać w komentarzach do tego posta lub na tymczasowym forum gry: http://omripulsar.freeforums.org/index.php (wersja angielskojęzyczna).
MySQL jest chyba najpowszechniej używaną bazą danych w różnego typu aplikacjach internetowych: od portali, przez fora, blogi, gry i inne rodzaje stron. Dlaczego? Bo jest szybka, prosta, darmowa i się przyjęła. Oprócz ewidentnych zalet ma też serię wad: standardowy engine MyISAM nie jest transakcyjny, nie jest bezpieczny, przy zapisie blokuje całą tabelę, a nie pojedynczy rekord. Jakby tego jeszcze było mało, to w 95% procentach przypadków, właśnie baza MySQL jest wąskim gardłem całej aplikacji i to jej wydajność (szybkość przetwarzania zapytań) decyduje o wydajności całego rozwiązania. Pracując nad pewną aplikacją (Pulsar-Online), przez ostatni tydzień starałem się skupić właśnie nad sprawą wydajności MySQL na której oparty jest Pulsar i podzielić się swoimi spostrzeżeniami na ten temat.
Po pierwsze, specyfika aplikacji internetowych, a przynajmniej ich większość, więcej odczytuje z bazy danych, niż do niej zapisuje. UPDATE i INSERT stanowią mniejszość w porównaniu z liczbą wykonywanych SELECTów. Wydajność pobierania rekordów z bazy ma więc dość duże znaczenie.
Ogólnie
Zastanówmy się, jak MySQL pobiera dane z tabeli, jeśli wybrana tabela nie posiada indeksów na polach które uwzględnimy w zapytaniu (zarówno w JOIN jak i WHERE lub ORDER BY). Dla każdego zapytania skanuje od początku wszystkie rekordy w tabeli, aż warunek nie zostanie znaleziony. Jeśli nie uwzględnimy LIMIT, MySQL będzie skanował dalej, aż do końca tabeli. Co to dla nas oznacza? Wyjaśnię na przykładzie.
Po raz kolejny wróciłem do pracy nad Pulsar Online. W tym tempie szybko nie skończę tej gry, lecz znów widać pewne postępy, kolejne rzeczy zaczęły wreszcie działać:
możliwość zakupu wyposażenia
podstawowe zarządzanie wyposażeniem
możliwość zakupu uzbrojenia
podstawowe zarządzanie uzbrojeniem
W chwili obecnej na agendzie są:
rejestracja graczy
optymalizacja bazy danych
prace koncepcyjne nad:
schematem walki, najprawdopodobniej zostanie on uproszczony względem moich oryginalnych pomysłów
interakcja z NPC
zarządzanie grą
Lista rzeczy do zrobienia jest ciągle bardzo długa aby można było myśleć o jakiś testach. Zobaczymy…