SQL vs noSQL

W ostatnim czasie zastanawiałem się nad zmianą bazy danych serwera Giazrmy. Obecnie stan gry przechowywany jest w bazie danych Mysql oraz pliku binarnym. Mógłbym jednak używać bazy tupu noSQL, ponieważ nie używam skomplikowanych zapytań łączących wiele tabel (nie korzystam z relacyjności bazy). Żeby sprawdzić, czy w ogóle mi się taka zmiana opłaca przeprowadziłem następujący test dla trzech typów źródeł danych: bazy Mysql, bazy MongoDB oraz pliku binarnego.

Test sprawdza szybkość odczytu / zapisu bloków danych (update i select).

  1. Tworzę testowy zbiór danych składający się z dużej liczby binarnych bloków danych o stałej długości

  2. Sekwencja testowa (powtarzana wielokrotnie):

    • Odczytaj wszystkie bloki danych

    • Zapisz wszystkie bloki danych

Parametry maszyny:

Intel Core 2 Duo 2.2GHz, 3GB ram

Parametry testów:

liczba powtórzeń odczytu / zapisu: 100
rozmiar bloku: 10000B
liczba bloków: 300

Implementacja:

kod testujący napisany został w PHP. Tutaj można pobrać kod źródłowy

Średni czas dla wykonania sekwencji testowej:

Mysql: 140ms
MongoDB: 80ms
Plik: 8ms

Oczywiście należy traktować te wyniki orientacyjnie, bo czasy zależą od chwilowego obciążenia systemu, sposobu instalacji serwerów baz (np. czy są na tej samej czy innej maszynie) i innych czynników.

Troll

Coś grywalnego

W tym miesiącu udało się zaimplementować graficzny interfejs do obsługi jednostek. W tej chwili można wydawać rozkazy jednostkom na mapie głównej oraz je kolejkować. Działa również przeliczanie stanu gry na serwerze, w związku z tym jednostki wykonują rozkazy które im się wyda a klient jest w stanie wyświetlić wszystkie zmiany na bieżąco. Krótko mówiąc grywalny zalążek wersji 0.7 jest już gotowy. Poniżej screen z gry:

Jednostka z wydanymi rozkazami
Screen z gry

W kolejnym miesiącu mam zamiar przywrócić do życia i jednocześnie poprawić interfejs zarządzania miastem który działał w wersji 0.65. Z powodu głębokich zmian w kodzie widok miasta przestał działać.

W tej chwili do wypuszczenia wersji którą mógłbym dać do testowania osobom niezwiązanym z projektem (tak jak wersje 0.64 i 0.65) brakuje:

  • Interfejsu zarządzania miastem
  • Możliwości zakładania nowych miast
  • Możliwości budowy farm / kopalń / dróg
  • Możliwości przesyłania zasobów między miastami

Szacuję, że wykonanie tej funkcjonalności zajmie mi około 3 miesięcy. W związku z tym grywalnej wersji można się spodziewać pod koniec zimy.

Troll