Pracuję nad grą wieloosobową w czasie rzeczywistym, która będzie wymagać bazy danych (dla takich funkcji, jak profile graczy, znajomi, odblokowania, aktualności itp.). Jest to standardowa gra na PC (nie oparta na przeglądarce) i wykorzystująca serwer-klient architektura. Nie jestem nowy w korzystaniu z baz danych i przeprowadziłem kilka badań w ciągu ostatnich kilku dni, kiedy natknąłem się na gorącą debatę: RDBMS kontra NoSQL. Obecnie skłaniam się ku NoSQL, ale po przeczytaniu o zastosowaniach dla każdego (RDBMS i NoSQL) kusi mnie, aby użyć obu. Wiem, że to może wydawać się dziwne, ale pozwól mi wyjaśnić moją sytuację:
Mój zespół ma wspólny pakiet hostingowy, który oferuje nieograniczone miejsce do przechowywania mySQL i przepustowość, z zastrzeżeniem, że możemy mieć tylko 25 połączeń jednocześnie (reguła współdzielonego hostingu). Mam zamiar używać tego do mojej witryny (typowe użycie bez wątpienia) w celu publikowania aktualizacji wiadomości, wspierania funkcji społeczności (takich jak komentarze, przesyłanie grafik fanów itp.) I tym podobnych. Wszystko w porządku i dobrze - ale! w tym miejscu robi się interesująco ... Chcę wyświetlić te same informacje, które są zamieszczone na mojej stronie internetowej, w grze. Oznacza to używanie mySQL zarówno w mojej witrynie, jak i w mojej grze. Oprócz postów z wiadomościami i tym podobnych, planuję używać go w grze do takich rzeczy jak czat i lista serwerów. Martwię się głównie tą zasadą 25 połączeń.
Co prowadzi mnie do pytania nr 1: Czy to zadziała i czy istnieje lepsza alternatywa?
Poza tym przeczytałem o tym, jak dobrze działa NoSQL i nadaje się do gier w czasie rzeczywistym (mogłem się mylić, przeszedłem przez wielką wojnę płomieniową RDBMS kontra NoSQL, aby się tu dostać i prawdopodobnie jestem spalony). Zasadniczo chciałbym używać MongoDB do wszystkich moich danych obiektów gry.
I znowu, pomocne będzie podanie kontekstu: znalazłem hosta (MongoLab), który oferuje pakiet 240 MB MongoDB za darmo, którego zamierzam używać, dopóki nie będzie konieczna aktualizacja. Biorąc pod uwagę 240 MB, obliczyłem, że będę w stanie pomieścić około 60 000 graczy (jeśli każdy z graczy ma około 4KB i zignorujemy inne rzeczy, które mogą być przechowywane). Przestrzeń dyskowa i konieczność płacenia za więcej w przyszłości (jeśli nasza gra się powiedzie) nie stanowi problemu. Jedynym powodem, dla którego obecnie zamierzam używać MongoDB do wszystkich moich danych obiektów gry, jest to, jak często będą uzyskiwane dostęp do tych danych obiektów gry (na przykład za każdym razem, gdy gracz zostanie zabity, podnosi przedmiot, strzela z broni itp.) I również lubią proste dokumenty bez schematu (które ułatwiają mapowanie danych obiektów gry). Powinienem zauważyć, że kiedyś
Zamierzam używać tego samego MongoDB na mojej stronie, aby wyświetlać informacje o profilu gracza (nie jestem zainteresowany pełną spójnością, pewne opóźnienie od aktualizacji w grze jest w porządku). Co prowadzi mnie do drugiego pytania: Pytanie 2: Czy to dobry pomysł, czy jest coś lepszego, co powinienem zrobić?
Gra będzie miała początkowe doświadczenie podobne do tego:
- Klient loguje się (MongoDB)
- Klient znajduje się na stronie głównej w grze w / czatach (MySQL)
- Klient przechodzi na listę serwerów (MySQL)
Klient łączy się z serwerem i gra na nim
Serwer komunikuje aktualizacje dla wszystkich graczy (MongoDB)
Tak sobie wyobrażałem, że to zadziała. Czy to ci odpowiada, czy masz sugestie dotyczące ulepszenia tego planu?