Beide Ansätze werden mit MMORPGs verwendet. Es scheint die beliebteste Option zu sein, alles im Speicher zu belassen und regelmäßig zu überprüfen, ob es auf die Festplatte verweist, zumindest für ältere Spiele. Es hat den Vorteil, dass es relativ einfach zu implementieren und relativ gut zu skalieren ist. Die Zuverlässigkeit liegt jedoch ganz bei den Entwicklern. SQL-Datenbanken bieten ACID-Eigenschaften , die die Zuverlässigkeit vereinfachen, insgesamt aber schwieriger zu implementieren sind und Probleme bei der Skalierung verursachen können.
EVE Online ist ein Beispiel für ein MMO, in dem alles in einer SQL-Datenbank gespeichert ist. Meiner Meinung nach lag der Höchststand bei etwa 60.000 gleichzeitigen Benutzern, und im Laufe der Jahre musste teure Hardware für die Datenbankserver bereitgestellt werden, um mit der Last Schritt zu halten. EVE speichert jedoch viel mehr Daten pro Benutzer als die meisten MMORPGs und hat viel häufigere und vielfältigere Transaktionen. Die ACID-Eigenschaften der Datenbank ermöglichen es, die gesamte massive und komplizierte Datenbank immer in einem konsistenten Zustand zu halten.
Betrachten Sie zum Beispiel den Fall, dass jemand einem anderen Spieler einen Gegenstand gibt. Die Datenbank von EVE garantiert, dass der Gegenstand auch bei einem Absturz oder Stromausfall nur im Inventar eines Spielers landet. Das heißt, die Datenbanktransaktion, die den Gegenstand aus dem Inventar eines Spielers entfernt und zum Inventar des anderen Spielers hinzufügt, ist atomar. Die Transaktion wird entweder vollständig abgeschlossen oder überhaupt nicht ausgeführt. Sie können nicht in einem Zustand enden, in dem der Gegenstand weder im Inventar der Spieler noch in beiden vorhanden ist.
Ein MMORPG, das Spielerdaten im Speicher hält und diese regelmäßig überprüft, muss diese Atomizität selbst implementieren. Eine Möglichkeit, dies zu tun, besteht darin, die Daten aller Spieler gleichzeitig zu überprüfen und sicherzustellen, dass der neue Prüfpunkt vollständig auf die Festplatte übertragen wird, bevor er als der letzte Prüfpunkt betrachtet wird. Das Spiel müsste auch sicherstellen, dass sich die Spielerdaten nicht ändern können, während sie überprüft werden. Bei einer großen Anzahl aktiver Spieler wird die Herausforderung all dies tun, ohne eine Verzögerung zu verursachen, die die Spieler bemerken würden.
Unterschätzen Sie nicht, wie wichtig Konsistenz ist. Wenn du dein Spiel entwickelst, wird es sehr abstürzen. Sie möchten nicht herausfinden müssen, warum Elemente verschwinden und / oder dupliziert werden, und nicht, wenn das Problem darin besteht, dass ein nicht verwandter Fehler das Spiel zu einem schlechten Zeitpunkt zum Absturz bringt. Wenn Ihr Spiel live geht, stürzt es außerdem weitaus mehr ab, als Sie erwarten. Ihr Server, der unter Testbedingungen einwandfrei funktionierte, wird plötzlich zahlreiche Fehler unter Volllast aufdecken und Spieler tun, was Sie nicht erwartet haben.
Beachten Sie, dass die meisten MMORPGs SQL-Datenbanken für kontobezogene Informationen verwenden, auch wenn sie keine tatsächlichen Spieldaten enthalten. Noch wichtiger als das Beibehalten des Spielstatus ist das Beibehalten des Abrechnungsstatus. Das Schlimmste daran, dass die Spieldatenbank beschädigt wird, ist, dass Sie die Datenbank aus einer täglichen Sicherung wiederherstellen müssen. Das Schlimmste daran, dass die Kontodatenbank beschädigt wird, ist, dass Sie wegen aller Rückbuchungen bankrott gehen.
Für Ihr Projekt können Sie wahrscheinlich beide Wege gehen. Mit 1000 gleichzeitigen Benutzern werden die Grenzen dessen, was ein SQL-Server heutzutage auf einem Standard-PC kann, wahrscheinlich nicht überschritten, aber vieles wird von der Art der Transaktionen abhängen. Wenn Sie mit SQL und dem Entwurf relationaler Datenbanken vertraut sind, kann dies für Sie hilfreich sein. Sie möchten die Transaktionen so weit wie möglich minimieren. Bei aktuellen Hitpoints des Spielers möchten Sie diese möglicherweise nur regelmäßig in der Datenbank speichern, da Statistiken wie diese nicht unbedingt konsistent sein müssen. (Im PvP-Spiel könnten sie jedoch ...) Speichern Sie keine Objekte wie Monster-HP in der Datenbank, da in den meisten Spielen nur spielerbezogene Daten persistent sind.
Wenn Sie jedoch kein SQL-Assistent sind, ist es möglicherweise einfacher, alle Daten im Arbeitsspeicher zu behalten, damit Sie zuverlässig arbeiten können. SQL-Datenbanken vereinfachen die Konsistenz und Zuverlässigkeit, sind jedoch nicht automatisch. Eine schlecht gestaltete Datenbank kann schlecht funktionieren und zu Inkonsistenzen führen. Transaktionen werden nicht atomar sein, es sei denn, Sie machen sie so. Wenn Sie parametrisierte Anweisungen nicht religiös verwenden, sind Sie SQL-Injection-Angriffen ausgesetzt.