Die Antwort ist ja, es ist eine gültige Option, aber nein, es ist wahrscheinlich keine gute Idee .
Es gibt zwei Hauptprobleme mit SQL, die NoSQL zu lösen versucht, wenn es um Spiele geht.
Die erste ist Latenz oder Verzögerung. In gewisser Hinsicht sind SQL-Datenbanken blitzschnell und verarbeiten Tausende von Transaktionen oder mehr in Zehntelsekunden. In einem anderen Sinne sind sie unglaublich langsam, da die Verarbeitung von nur wenigen Transaktionen genauso viel Zeit in Anspruch nehmen kann. Bei den meisten Datenbankverwendungen spielt dies keine Rolle, aber Spiele haben eine Echtzeitkomponente. Es geht also nicht nur darum, wie viele Transaktionen Sie pro Sekunde ausführen können, sondern auch um die durchschnittliche Zeit, die zum Antworten auf eine Datenbanktransaktion benötigt wird.
Diese Latenz ist ein großes Problem bei Echtzeitspielen. Viele Entwickler, die große Datenbanken benötigen (normalerweise für MMOs), bauen eine Caching-Ebene auf, die sich zwischen der Datenbank und den Spieleservern befindet, um diese Blockierungen zu vermeiden, und leeren dann den Cache regelmäßig. Das Problem? Sie haben gerade die Hauptgründe für die Verwendung einer Datenbank genannt - Atomarität, Konsistenz, Isolation und Beständigkeit .
Dieses Problem trifft jedoch nicht auf Web-Spiele zu.Sie haben bereits eine Verbindung mit hoher Latenz zwischen dem Player und dem Spiel, sodass Sie möglicherweise den von SQL bereitgestellten Durchsatz sowie die Vorteile ausgereifter, bekannter Software nutzen können.
Das zweite Problem trifft jedoch auf Sie zu, und das ist die Fehlanpassung der objektrelationalen Impedanz . Spiele beschäftigen sich mit Objekten, Datenbanken beschäftigen sich mit Zeilen. Wenn Sie Glück haben, können Sie ein Objekt in eine Zeile verwandeln, indem Sie nur die Felder auflisten. Die meisten Objekte sind jedoch hierarchisch und müssen auf irgendeine Weise abgeflacht werden, um sie in Zeilen zu unterteilen.
Dokumentbasierte Datenbanken wie CouchDB und MongoDB lösen dieses Problem, indem sie das Dokument zum Objekt der obersten Ebene und nicht zur Zeile heraufstufen ("document" ist in diesem Fall ein Synonym für "object"). Auf diese Weise verlieren sie jedoch viele der Vorteile von SQL-Datenbanken. Der Durchsatz ist viel geringer und die Sperralgorithmen werden viel komplizierter.
Die gute Nachricht ist, dass bereits viele ORM- Tools (Object Relational Mapping) für die von Ihnen verwendete Sprache verfügbar sind. Mit ihnen können Sie zwischen Objekten im Arbeitsspeicher und Zeilen in der Datenbank ziemlich transparent übersetzen. Diese Tools sind im Allgemeinen nicht für große Echtzeitspiele geeignet, da sie die schlechtesten Leistungsaspekte von SQL- und NoSQL-Datenbanken aufweisen können. Aber für ein Web-Spiel ist es in Ordnung - im schlimmsten Fall, wenn Sie auf Leistungsprobleme stoßen, können Sie wieder Transaktionen auf die altmodische Weise durchführen. Das Latenzproblem schadet Ihnen nicht und der höhere Durchsatz hilft Ihnen.
Abschließend möchte ich einen Punkt an anderer Stelle erläutern : Es geht nicht um statische Spieldaten. Ich spreche hier nicht über Ihre Artikelbeschreibungen oder Ihren Waffenschaden oder Sprites oder irgendetwas. Ich meine die realen, veränderlichen Spieldaten, wie zum Beispiel, was sich im Inventar eines Spielers befindet oder was seine Statistiken sind. Für die statischen Daten benötigen Sie lediglich einen Datenspeicher. Möglicherweise stellt sich heraus, dass es am einfachsten ist, dieselbe Datenbank wie den Datenspeicher zu verwenden, da Sie über ein hervorragendes ORM verfügen. Vielleicht brauchst du nur das Dateisystem. Es sind zwei getrennte Probleme, und eine Antwort muss (und wird wahrscheinlich nicht) für beide Fälle passen.