2010-12-10 11 views
5

Ich fragte mich, welche Vorteile eine Nosql-Option entweder anstelle oder in Verbindung mit einem RDBMS für ein typisches MMORPG haben könnte. Insbesondere bin ich neugierig, wie Datenintegrität unter nosql erhalten bleibt.NoSql Option für MMORPGs

Ich werde ein paar Beispiele geben, wo ich als zu Art bin verwirrt, wie Server-Logik funktionieren würde:

Szenario 1: Die Spieler A und B Angriffsspieler C zugleich sagen lassen. Ein player_stats.kill_count wird aktualisiert Unabhängig davon, welche Spieler tötet Spieler C. Normalerweise könnte man diese AttackPlayerRequest in der folgenden Art und Weise handhaben:

Transaktion beginnen { attacker.health = newAttackerHealth

defender.health = newDefenderHealth

wenn defender.Health == 0 { attacker.stats.kills + = 1 } }

Szenario 2: Spieler A se Bringt einen Gegenstand zu einem NPC-Händler und versucht schnell, den gleichen Gegenstand aus seinem Inventar auf den Boden zu werfen. (Auch wenn du UI das nicht zulässt, können sie die Ereignisse einfach auf den Draht legen).

Diese Liste geht offensichtlich weiter und betrifft fast jede Interaktion zwischen Spieler und Spieler. Eine letzte Information ist, dass der Server threaded ist, da wir keine besonders lange Anfrage haben wollen, um andere Spieler daran zu hindern, einfache Dinge im Spiel zu tun.

Ich denke, meine große Frage ist hier, verstehe ich etwas über Nosql in dem dies ein triviales Problem? Wenn nicht, ist dies jenseits der Domäne dessen, was Nosql-Optionen lösen sollen? Unter einem typischen MMO, wo könnte man Nosql-Optionen injizieren, um die Serverleistung zu erhöhen?

+1

Sie könnten besser Antwort auf: http://gamedev.stackexchange.com/, da Ihre Frage mit der Entwicklung von Spielen verbunden ist. – HoLyVieR

+0

Die meisten NoSQL-Systeme unterstützen keine Transaktionen. Brauchst du sie? – TTT

+0

Ich glaube nicht, dass NoSQL-Systeme Funktionen zur Datenintegrität haben. Das ist etwas, was in der Anwendung getan werden muss. Obwohl die NoSQL-Gruppe eine sehr heterogene Gruppe ist, gibt es vielleicht eine Ausnahme von dieser allgemeinen Regel. – TTT

Antwort

2

Ich denke, MMO-Server würden eine Menge von den Dingen tun, die Sie im Speicher aufgelistet haben. Ich glaube nicht, dass sie all diese in die Datenbank gespült haben. Ich denke, dass mehr Hard-Set-Ereignisse wie das Empfangen neuer Ausrüstung oder das Ändern des Ausrüstungslayouts gespeichert werden.

Es ist eine Menge Daten, aber nicht annähernd so viel wie jede einzelne Kampfinteraktion.

0

Nach meinem Verständnis ist Nosql-Technologie etwas, das Sie in einem Batch-Job-Kontext und nicht in einem Echtzeitkontext verwenden würden. Tatsächlich befindet sich die Open-Source-H-Base-Implementierung auf dem Hadoop-verteilten Dateisystem (hdfs), das hauptsächlich für schreibgeschützte Situationen verwendet wird.

Die Idee ist, dass Sie einen Datensatz "suchen", indem Sie über den gesamten Datensatz, den Sie auf der Festplatte haben, iterieren (auf einem verteilten Dateisystem). Bei Petascale-Datasets ist es nicht möglich, die Daten im Speicher zu behalten, sodass Sie große Mengen an Disk-Reads verwenden, um die Daten überhaupt "suchen" zu können. Die verteilte Natur stellt sicher (oder erleichtert), dass dies rechtzeitig geschieht.

Das Prinzip ist, dass Sie die Verarbeitung zu den verteilten Daten bringen, anstatt Daten aus einer sehr großen Datenbank zu ziehen, über das Netzwerk zu senden und dann auf einem lokalen Knoten zu verarbeiten. Pig (http://pig.apache.org/) und Hive (http://hive.apache.org/) sind Schnittstellen zu hdfs, die SQL-ähnliche Abfragen ermöglichen, aber im Hintergrund verwenden sie mapreduce Arbeitsplätze. Interaktion ist langsam, aber das ist nicht der Punkt. Der Punkt ist, dass der immense Datensatz überhaupt verarbeitet werden kann.

Für Spiele ist dies offensichtlich nicht der richtige Weg.Sie erwarten also, dass Daten aus dem verteilten Dateisystem abgerufen, auf einem Server zwischengespeichert und während einer Sitzung verwendet werden. Wenn das Spiel beendet ist, werden alle Daten an den Datensatz übergeben. (Zumindest, so stelle ich mir vor, würde es gehen).

Hdfs-Datensätze werden meist zu einem bestimmten Zeitpunkt bearbeitet, danach werden die Ergebnisse in einem Batch veröffentlicht. Zum Beispiel würden Sie in einer sozialen Netzwerk-Site täglich alle Verbindungsdaten kompilieren, nach neuen Verbindungen zwischen Personen suchen, und wenn die Operation für alle Personen in der Datei beendet ist, würden die Ergebnisse im typischen veröffentlicht 'X ist jetzt mit Y' Nachrichten verbunden. Dies geschieht nicht in Echtzeit.

+0

Sie verwenden zwar Hadoop und HBase für die Stapelverarbeitung, aber NoSQL ist eine heterogene Gruppe. Zum Beispiel ist MongoDb mehr ein OLTP-System, aber ohne Transaktionen, also OLP. Hier eine Liste von Anwendungsfällen für NoSQL-Datenbanken: http://highscalability.com/blog/2010/12/6/what-the-heck-are-you-actually-using-nosql-for.html – TTT

4

Das hängt davon ab, wie Ihr Spiel funktioniert.

NoSQL

Farmville auf Facebook verwendet NoSQL. Farmville verhält sich wie ein riesiger Server, auf dem jeder steht. Nehmen wir an, Farmville verwendet 3 Computer in seinem Datenbank-Cluster. Computer 1 in San Diego. Computer 2 in New York. Computer 3 in Moskau. Ich melde mich bei Facebook aus San Diego an, so dass ich mich hier mit der Datenbank verbinde. Ich lege mich auf und log dich ab. Schließlich wird Computer 1 Computer 2 und 3 darüber informieren, wie ich geebnet habe, aber es könnte bis zu einer Stunde dauern, bis jemand in Russland diese Änderungen auf meinem Konto sehen würde.

Die NoSQL-Skalierung ist so einfach wie das Hinzufügen eines anderen Computers zum Cluster und das Angeben der Website in dieser Region zur Verwendung dieses Computers.

SQL

Es gibt mehrere Methoden von SQL Arbeit machen, aber ich werde einen Weg erklären, um es

Jedes Datenzentrum zu NoSQL ähnlich zu machen 10 Game-Server hat, die jeweils mit einem eigenen SQL Datenbank + 1 Sub-Master-Datenbank. Die Submaster-Datenbank teilte die Informationen zwischen allen 10 Servern. Wenn Sie sich also bei Server 1 anmelden und den Charakter John Doe bilden und sich abmelden, erhält Server 10 Ihren Charakter, wenn Sie sich als nächstes bei diesem Server anmelden.

Der Sub-Master gibt dann seine Informationen an den Master-Server in Ihrem Hauptsitz weiter. Der Master-Server teilt dann John Doe mit jedem anderen Sub-Master in allen anderen Rechenzentren, und diese Sub-Master aktualisieren ihre Gameserver. Diese Konfiguration ermöglicht es Ihnen, sich auf dem Server Weed in San Francisco anzumelden, Ihren Charakter zu spielen, sich abzumelden, auf dem Server Vodka in Moskau einzuloggen und Ihren Charakter immer noch zu sehen.

Spiele wie World of Warcraft verwenden SQL, aber nur bestimmte Teile der Datenbank werden geteilt. Dies ermöglicht eine reduzierte Datenbankgröße auf jedem Computer und reduziert auch die Hardwareanforderungen.

In einer realen Situation hätte jeder Sub-Master einen Backup-Sub-Master, und Ihr Master-Server hätte ein paar Backup-Server für den Fall, dass ein Server ausfällt Ihr gesamtes Netzwerk würde nicht abstürzen.

1

MMORPGs, die sich Sorgen um Latenz machen, laufen normalerweise auf einem einzelnen Server und speichern alles außer Objektmodellinformationen im RAM. Alles mit Kampfumgebungen ist besorgt über die Latenz.

Alles, was HDD verwendet, sei es ein RDBMS oder NoSQL, ist eine schlechte Idee in Kampfumgebungen. Das Aktualisieren und Freigeben von Objektanpassungs-, Positions-, Bewegungsvektor-, Orientierungsvektor-, Gesundheits-, Energiedaten usw. Daten zwischen 10.000 Benutzern auf einem einzelnen Server über jeden Mechanismus, der HHD verwendet, ist nur albern, wenn Sie sich Sorgen um Latenz machen. Selbst wenn 2 Leute in einer einfachen Arena kämpfen, ist Latenz immer noch ein Problem und Sie sollten auf einem einzelnen Server laufen und alles im Speicher behalten.Alles, was gerendert wird, sollte sich auf Ihrem PC oder im Speicher Ihres PCs befinden.

MMORPGs, die keine Sorgen um Latenz sind auf mehreren Servern ausgeführt werden können und jede Datenbank, die Sie wünschen (NoSQL, MySQL, etc ...)

Wenn Sie ein Spiel wie Farmville oder neopets machen, dann ja, NoSQL oder MySQL werden zu gültigen Optionen.