2010-12-10 11 views
5

Zastanawiam się, jakie korzyści może mieć opcja nosql zamiast w połączeniu z rdbms dla typowego MMORPG. W szczególności jestem ciekawy, jak integralność danych jest zachowana pod nosql.Opcja NoSql dla gier MMORPG

Podam kilka przykładów, gdzie jestem trochę zdezorientowany, jak logika serwer będzie działać:

Scenariusz 1: Powiedzmy, że gracz A i B Gracz C ataku w tym samym czasie. Player_stats.kill_count jest aktualizowana na którykolwiek gracz zabija gracza C. Normalnie, można obsługiwać ten AttackPlayerRequest w następujący sposób:

rozpocząć transakcji { attacker.health = newAttackerHealth

defender.health = newDefenderHealth

jeśli defender.Health == 0 { attacker.stats.kills + = 1 } }

Scenariusz 2: Gracz se Wysyła element do dostawcy NPC i szybko próbuje upuścić ten sam przedmiot ze swojego ekwipunku na ziemię. (Nawet jeśli interfejs użytkownika uniemożliwia to, może po prostu umieścić zdarzenia na drucie).

Ta lista oczywiście ma wpływ na każdą interakcję gracza-gracza. Ostatnią informacją jest to, że serwer jest wątkowany, ponieważ nie chcemy żadnych szczególnie długich żądań, aby zablokować innym graczom możliwość robienia prostych rzeczy w grze.

Domyślam się, że moje wielkie pytanie brzmi: czy nie rozumiem czegoś związanego z nosqlem, w którym jest to banalny problem? Jeśli nie, to czy to wykracza poza domenę tego, jakie opcje nosql mają rozwiązać? Pod typową MMO, gdzie można wprowadzać opcje nosql, aby zwiększyć wydajność serwera?

+1

Możesz uzyskać lepszą odpowiedź na: http://gamedev.stackexchange.com/, ponieważ twoje pytanie jest związane z tworzeniem gier. – HoLyVieR

+0

Większość systemów NoSQL nie obsługuje transakcji. Czy ich potrzebujesz? – TTT

+0

Nie sądzę, że istnieją systemy NoSQL, które mają funkcje integralności danych. To jest coś, co należy zrobić w aplikacji. Grupa NoSQL jest bardzo zróżnicowaną grupą, więc być może istnieje wyjątek od tej ogólnej zasady. – TTT

Odpowiedz

2

Myślę, że serwery MMO zrobiłyby wiele rzeczy wymienionych w pamięci. Nie sądzę, że spłukują je wszystkie w bazie danych. Sądzę, że zapisanoby bardziej trudne wydarzenia, takie jak przyjmowanie nowego sprzętu lub zmiana układu wyposażenia.

To dużo danych, ale nie tak bardzo, jak każda pojedyncza interakcja w walce.

0

Według mnie technologia nosql jest czymś, czego można użyć w kontekście zadań wsadowych, a nie w czasie rzeczywistym. W rzeczywistości, implementacja open source H-base znajduje się na szczycie rozproszonego systemu plików (hdfs), który jest używany głównie w sytuacjach tylko do odczytu.

Chodzi o to, że "szukamy" rekordu, powtarzając cały zestaw danych przechowywanych "na dysku" (faktycznie w rozproszonym systemie plików). W przypadku zbiorów danych petascale nie jest możliwe przechowywanie danych w pamięci, więc wykorzystujesz ogromne ilości odczytów dysków, aby w ogóle móc "szukać" danych. Rozproszony charakter zapewnia (lub ułatwia), że ma to miejsce w odpowiednim czasie.

Zasada polega na tym, że przetwarzanie danych rozproszonych, zamiast pobierać dane z bardzo dużej bazy danych, wysyła się przez sieć, a następnie przetwarza w lokalnym węźle. Pig (http://pig.apache.org/) i Hive (http://hive.apache.org/) to interfejsy na górze hdfs, które pozwalają na zapytania podobne do SQL, ale w tle używają mapreduce Oferty pracy. Interakcja jest powolna, ale nie o to chodzi. Chodzi o to, że ogromny zestaw danych może być w ogóle przetwarzany.

Jeśli chodzi o gry, nie jest to oczywiście droga.Tak więc można oczekiwać, że dane będą pobierane z rozproszonego systemu plików, buforowane na serwerze i wykorzystywane podczas sesji. Po zakończeniu gry wszystkie dane zostaną przywrócone do zestawu danych. (Przynajmniej tak to sobie wyobrażam).

Zestawy danych Hdfs są najczęściej przetwarzane w określonym momencie, po czym wyniki są publikowane w jednej partii. Na przykład w witrynie sieci społecznościowej codziennie kompilowałeś wszystkie dane połączeń, wyszukiwałeś wszystkie nowe połączenia między ludźmi, a gdy operacja zakończyła się dla wszystkich osób w zbiorze danych, wyniki byłyby publikowane "X jest teraz połączony z wiadomościami Y". To się nie dzieje w czasie rzeczywistym.

+0

Używasz Hadoop i HBase do przetwarzania wsadowego, ale NoSQL jest zróżnicowaną grupą. Na przykład MongoDb jest bardziej systemem OLTP, ale bez transakcji, więc OLP. Oto lista przypadków użycia baz danych NoSQL: http://highscalability.com/blog/2010/12/6/what-the-heck-are-you-actually-using-nosql-for.html – TTT

4

Wszystko zależy od tego, jak działa twoja gra.

NoSQL

Farmville na Facebooku wykorzystuje NoSQL. Farmville działa jak jeden ogromny serwer, na którym wszyscy się znajdują. Załóżmy, że Farmville używa 3 komputerów w swoim klastrze bazy danych. Komputer 1 w San Diego. Komputer 2 w Nowym Jorku. Komputer 3 w Moskwie. Loguję się do Facebooka z San Diego, więc I połączyć się z bazą danych tutaj. Podnoszę poziom i się wylogowuję. W końcu komputer 1 powie komputerowi 2 i 3, w jaki sposób zostałem wyrównany, ale może minąć nawet godzina, zanim ktoś w Rosji zobaczy te zmiany na moim koncie.

Skalowanie NoSQL jest tak proste, jak dodanie do klastra innego komputera i poinformowanie strony w tym regionie o użyciu tego komputera.

SQL

Istnieje kilka metod dokonywania SQL praca, ale opiszę sposób, aby uczynić go podobnym do NoSQL

Każde centrum danych będzie mieć 10 serwerów gry, każdy z własnym SQL Baza danych + 1 baza danych podrzędnych. Główna baza danych podrzędnych podzieliła informacje między wszystkimi 10 serwerami, więc jeśli zalogujesz się na serwer 1 i zrobisz znak John Doe, a następnie wylogujesz się, serwer 10 będzie miał twoją postać, jeśli zalogujesz się do tego serwera w następnej kolejności.

Sub Master następnie dzieli się informacjami z serwerem głównym w siedzibie głównej. Serwer główny podzieli się wówczas z Johnem Doe'em z każdym innym podrzędnym we wszystkich innych centrach danych, a ci subagenci zaktualizują swoje serwery gier. Ta konfiguracja pozwoliłaby ci zalogować się do serwera Weed w San Francisco, zagrać swoją postać, wylogować się, zalogować na serwerze Wódka w Moskwie i nadal widzieć swoją postać.

Gry takie jak World of Warcraft korzystają z SQL, ale udostępniane są tylko określone części bazy danych. Pozwala to zmniejszyć rozmiar bazy danych na każdym komputerze, a także zmniejszyć wymagania sprzętowe.

W prawdziwej sytuacji życiowej każdy Sub Master miałby zapasowy Sub Master, a twój serwer Master miałby kilka serwerów kopii zapasowych w przypadku awarii jednego serwera, a cała twoja sieć nie byłaby blokowana.

1

Gry MMORPG, które obawiają się opóźnień, zwykle działają na pojedynczym serwerze i przechowują wszystko oprócz informacji o modelu obiektowym w pamięci RAM. Wszystko, co ma środowisko walki, obawia się opóźnień.

Wszystko, co używa HDD, czy to RDBMS czy NoSQL, jest złym pomysłem w środowiskach bitewnych. Aktualizowanie i udostępnianie dostosowania obiektu, położenia, wektora ruchu, wektora orientacji, stanu zdrowia, mocy itp. Dane od 10 000 użytkowników na jednym serwerze za pośrednictwem dowolnego mechanizmu wykorzystującego HHD są po prostu głupie, jeśli obawiasz się opóźnień. Nawet jeśli masz 2 osoby walczące na prostej arenie, opóźnienie nadal stanowi problem i powinieneś działać na jednym serwerze i zachować wszystko w pamięci.Wszystko, co będzie renderowane, powinno znajdować się na komputerze lub w pamięci komputera.

MMORPG, które nie są zaniepokojeni opóźnieniami można uruchomić na wielu serwerach i dowolnej bazy danych, którą chcesz (NoSQL, MySQL, itp ...)

Jeśli robisz grę jak FarmVille czy Neopets, to tak, NoSQL lub MySQL stają się ważnymi opcjami.