Ich arbeite an einem Echtzeit-Multiplayer-Spiel, für das eine Datenbank erforderlich ist (für Funktionen wie Spielerprofile, Freunde, Freischaltungen, Nachrichten usw.). Dies ist ein Standard-PC-Spiel (nicht browserbasiert) und verwendet einen Client-Server die Architektur. Ich bin neu im Umgang mit Datenbanken und habe in den letzten Tagen einige Nachforschungen angestellt, als ich auf die hitzige Debatte gestoßen bin: RDBMS vs NoSQL. Momentan neige ich zu NoSQL, aber nachdem ich die Verwendungsmöglichkeiten für beide (RDBMS und NoSQL) gelesen habe, bin ich versucht, beide zu verwenden. Ich weiß, dass das seltsam erscheinen mag, aber lassen Sie mich meine Situation erklären:
Mein Team hat ein gemeinsames Webhosting-Paket, das unbegrenzten mySQL-Speicher und unbegrenzte Bandbreite bietet. Die einzige Einschränkung besteht darin, dass nur 25 Verbindungen gleichzeitig geöffnet sein können (gemeinsame Hosting-Regel). Ich beabsichtige, dies für meine Website zu verwenden (ohne Zweifel eine typische Verwendung), um News-Updates zu veröffentlichen, Community-Funktionen zu unterstützen (wie Kommentare, das Hochladen von Fanartikeln usw.) und dergleichen. Das ist alles in Ordnung und gut - aber! Hier wird es interessant ... Ich möchte die gleichen Informationen anzeigen, die auf meiner Website im Spiel veröffentlicht sind. Dies bedeutet, mySQL sowohl für meine Website als auch für mein Spiel zu verwenden. Zusätzlich zu Nachrichten und Ähnlichem plane ich, es im Spiel für Dinge wie Chat und eine Serverliste zu verwenden. Ich mache mir hauptsächlich Sorgen um diese 25-Verbindungs-Regel.
Was mich dazu bringt, Frage 1 zu stellen: Funktioniert das und gibt es eine bessere Alternative?
Außerdem habe ich gelesen, wie gut NoSQL funktioniert und für Echtzeitspiele geeignet ist (ich könnte mich irren, ich bin durch einen riesigen RDBMS-gegen-NoSQL-Flame-Krieg gelaufen, um hierher zu kommen, und wahrscheinlich bin ich verbrannt). Grundsätzlich möchte ich MongoDB für alle meine Spielobjektdaten verwenden.
Auch hier ist es hilfreich, wenn ich einen Kontext zur Verfügung stelle: Ich habe einen Host (MongoLab) gefunden, der ein kostenloses 240-MB-MongoDB-Paket anbietet, das ich verwenden möchte, bis ein Upgrade erforderlich ist. Angesichts von 240 MB habe ich berechnet, dass ich in der Lage sein werde, ungefähr 60.000 Spieler zu speichern (wenn jeder Spieler ungefähr 4 KB groß ist und wir andere Dinge, die gespeichert werden könnten, ignorieren). Der Speicherplatz und in Zukunft mehr bezahlen zu müssen (sollte unser Spiel erfolgreich sein) ist kein Problem. Der einzige Grund, warum ich derzeit beabsichtige, MongoDB für alle meine Spielobjektdaten zu verwenden, besteht darin, wie oft auf diese Spielobjektdaten zugegriffen wird (z. B. wenn ein Spieler getötet wird, einen Gegenstand aufnimmt, eine Waffe abfeuert usw.) gefällt auch den einfachen schemafreien Dokumenten (die das Abbilden von Spielobjektdaten erleichtern). Ich sollte beachten, dass auf einmal
Ich beabsichtige, dieselbe MongoDB auf meiner Website zu verwenden, um Informationen zum Spielerprofil anzuzeigen (ich bin nicht an vollständiger Konsistenz interessiert, einige Verzögerungen bei Updates im Spiel sind in Ordnung). Was mich zu meiner zweiten Frage führt, Frage 2: Ist das eine gute Idee oder gibt es etwas Besseres, das ich tun sollte?
Das Spiel wird eine ähnliche Starterfahrung haben:
- Client-Logins (MongoDB)
- Der Client befindet sich auf der Startseite des Spiels mit Chatrooms (MySQL).
- Client geht zur Serverliste (MySQL)
Der Client stellt eine Verbindung zu einem Server her und spielt darin
Server kommuniziert Updates für alle Spieler (MongoDB)
Das ist genau so, wie ich es mir vorgestellt habe. Sieht das für Sie gut aus oder haben Sie Vorschläge, wie dieser Plan verbessert werden kann?