Oba podejścia są stosowane w MMORPG. Przechowywanie wszystkiego w pamięci i okresowe sprawdzanie kierowania go na dysk wydaje się być najpopularniejszą opcją, przynajmniej w przypadku starszych gier. Ma tę zaletę, że jest dość łatwa do wdrożenia i skalowania dość dobrze, ale zapewnienie niezawodności zależy wyłącznie od dewelopera. Bazy danych SQL zapewniają właściwości ACID, które ułatwiają niezawodność, ale ogólnie są bardziej skomplikowane w zakresie prawidłowej implementacji i mogą mieć problemy ze skalowaniem.
EVE Online jest przykładem MMO, w którym wszystko jest przechowywane w bazie danych SQL. Myślę, że osiągnął szczyt około 60 000 jednoczesnych użytkowników i przez lata musiał poświęcić serwerom bazy danych drogi sprzęt, aby nadążyć za obciążeniem. Jednak EVE przechowuje o wiele więcej danych na użytkownika niż większość MMORPG i ma o wiele częstsze i zróżnicowane transakcje. Właściwości ACID bazy danych pozwalają na utrzymanie całej ogromnej i skomplikowanej bazy danych w spójnym stanie.
Rozważmy na przykład przypadek, gdy ktoś daje przedmiot innemu graczowi. Baza danych EVE gwarantuje, że nawet w przypadku awarii lub awarii zasilania przedmiot trafi do ekwipunku tylko jednego gracza. Oznacza to, że transakcja w bazie danych, która usuwa przedmiot z ekwipunku jednego gracza i dodaje go do ekwipunku innego gracza, jest atomowa. Transakcja jest w pełni zakończona lub w ogóle się nie dzieje. Nie możesz skończyć w stanie, w którym przedmiot nie istnieje w ekwipunku żadnego z graczy ani w obu.
MMORPG, który przechowuje dane gracza w pamięci i okresowo kontroluje, musi sam zaimplementować tę atomowość. Jednym ze sposobów, aby to zrobić, byłby punkt kontrolny danych każdego gracza w tym samym czasie, zapewniając, że nowy punkt kontrolny jest w pełni przypisany do dysku, zanim zostanie uznany za najnowszy punkt kontrolny. Gra musiałaby również dopilnować, aby dane gracza nie mogły się zmienić podczas kontroli. Przy dużej liczbie aktywnych graczy wyzwanie staje się tym wszystkim bez powodowania opóźnienia wystarczająco długo, aby gracze to zauważyli.
Nie lekceważ, jak ważna jest spójność. Gdy rozwijasz swoją grę, będzie się ona często zawieszać. Nie musisz śledzić, dlaczego przedmioty znikają i / lub powielają się, nie wtedy, gdy problemem jest niezwiązany błąd, który powoduje awarię gry w złym momencie. Co więcej, gdy gra zostanie uruchomiona, zawiesi się znacznie bardziej, niż się spodziewasz. Twój serwer, który działał idealnie podczas testowania, nagle ujawni liczne błędy pod pełnym obciążeniem, a gracze robią rzeczy, których się nie spodziewałeś.
Zauważ, że większość MMORPG używa baz danych SQL do informacji związanych z kontem, nawet jeśli nie do rzeczywistych danych gry. Jeszcze ważniejsze niż utrzymanie stanu gry w spójnym stanie jest utrzymanie stanu fakturowania. Najgorszym przypadkiem uszkodzenia bazy danych gier jest konieczność przywracania bazy danych z codziennej kopii zapasowej. Najgorszym przypadkiem uszkodzenia bazy danych kont jest to, że bankrutujesz z powodu wszystkich obciążeń zwrotnych.
Do swojego projektu prawdopodobnie możesz pójść w obie strony. Posiadanie 1000 równoczesnych użytkowników prawdopodobnie nie przekroczy limitów, jakie może obecnie obsługiwać serwer SQL na zwykłym komputerze PC, ale wiele będzie zależeć od charakteru transakcji. Jeśli znasz SQL i projektowanie relacyjnych baz danych, może to działać dla Ciebie. Będziesz chciał zminimalizować transakcje w jak największym stopniu, dla czegoś takiego jak bieżące punkty życia gracza możesz chcieć tylko okresowo zapisywać je w bazie danych, ponieważ takie statystyki niekoniecznie muszą być spójne. (W grze PvP mogą jednak ...) W ogóle nie przechowują takich rzeczy jak HP potworów w bazie danych, w większości gier tylko dane dotyczące graczy są trwałe.
Z drugiej strony, jeśli nie jesteś kreatorem SQL, przechowywanie wszystkich danych w pamięci może być znacznie prostsze, aby zapewnić niezawodne działanie. Bazy danych SQL ułatwiają spójność i niezawodność, ale nie są automatyczne. Źle zaprojektowana baza danych może słabo działać i prowadzić do niespójności. Transakcje nie będą atomowe, chyba że je zrobisz. Jeśli nie użyjesz sparametryzowanych instrukcji religijnie, otworzysz się na ataki typu SQL injection.