Welche DBMS sind schnell genug für ein Online-Spiel (einige tausend Spieler)? [geschlossen]

8

Ich mache gerade ein MMORPG-Spiel, bei dem einige tausend Spieler gleichzeitig online sein könnten (wahrscheinlich nicht; nur Wunschdenken). Zuerst wollten wir MySQL verwenden, aber ich habe gehört, dass es für diese Skala nicht schnell genug ist.

Welches DBMS ist schnell genug? Wie sehr ähnelt es SQL Server (da ich SQL Server in der Schule gelernt habe)?

Simon Verbeke
quelle
World Of Warcraft basiert auf Oracle.
Philᵀᴹ
Unabhängig davon, für welches DBMS Sie sich entscheiden, vergessen Sie nicht, die Lizenzierung zu berücksichtigen. Vielleicht ist Ihre kostenlose Version für kleine Lasten in Ordnung, aber wenn Sie skalieren oder verkleinern müssen, kann es zu einem schweren Fall von Aufkleberschock kommen.
Datum

Antworten:

24

Diese Frage ist wirklich schwer zu beantworten. Sie können die schnellste Datenbankplattform der Welt nehmen, ein schreckliches Schema entwerfen, eine beschissene Anwendung darum schreiben und dann versucht sein, der Datenbankplattform die Schuld zu geben. Gleichzeitig können Sie den kostenlosen SQL Server Express verwenden und mit dem richtigen Design, der richtigen Anwendungslogik und einem Ansatz für eine vernünftige Skalierbarkeit (z. B. Skalieren von Lesevorgängen durch Daten-Caching usw.) eine Anwendung schreiben, die Tausende von verarbeitet Benutzer kein Problem.

Glaube ich, dass SQL Server Tausende von Benutzern verarbeiten kann? Absolut. Glaube ich, dass Oracle und DB2 dies auch können? Bestimmt. MySQL? Nicht sicher, nicht genug Erfahrung dort. Zugriff? Wahrscheinlich überhaupt keine kluge Wahl. Wenn Sie mit SQL Server vertraut sind, ist dies die Route, die Sie in Betracht ziehen. Denken Sie jedoch daran, dass Ihre Wahl des RDBMS an und für sich keinen Erfolg oder Misserfolg bestimmt.

Aaron Bertrand
quelle
Nun, ich brauchte nur eine Richtlinie. Es ist nicht so, dass ein kleines Indie-Spiel sofort Tausende von Benutzern gleichzeitig erreichen wird. Vielen Dank!
Simon Verbeke
3
Während Sie möglicherweise nicht planen, Tausende von Benutzern sofort zu erreichen, werden Sie, wenn Sie von Anfang an nicht richtig planen, in eine Situation geraten, in der Sie einen großen Ausfall erleiden müssen oder zumindest eine größere Verlangsamung haben für eine Weile, während Sie daran arbeiten, die Probleme zu beheben.
Mrdenny
Richtig, und hier ist ein zeitgemäßer Artikel, in dem erklärt wird, wie Facebook jetzt den Brand für seine anfänglichen Designentscheidungen verspürt, basierend auf den Argumenten "Wir werden nie große Probleme bekommen": gigaom.com/cloud/… ... habe gerade bemerkt, dass auf diesen Artikel auch verwiesen wurde in Rolandos Antwort
Aaron Bertrand
@ Aaron: Gutes Zeug. +1 für Ihre Antwort, da Software-Infrastrukturen rund um MMORPG datenbankunabhängig sein und sich dennoch verhalten sollten !!!
RolandoMySQLDBA
12

Lassen Sie es mich so sagen, erinnern Sie sich an GameSpy Arcade aus den frühen / mittleren 2000er Jahren? Es lief Tausende von Spielen und alle liefen auf SQL Server und unterstützten Zehntausende von Benutzern gleichzeitig (ja, wir hatten mehrere SQL Server, die verschiedene Dinge taten). Es geht um das Design der Datenbank und darum, wie Sie das System verwenden. Tun Sie dies richtig und Ihr Projekt wird erfolgreich sein, tun Sie dies falsch und Ihr Projekt wird schlecht scheitern.

mrdenny
quelle
Schön, diese Informationen über GameSpy zu kennen, besonders seit ich sie benutzt habe. Ich wusste die ganze Zeit nichts über den SQL-Teil.
Stanley Johns
1
Vergessen Sie nicht, damals war die neueste Version SQL 2000 und wir haben mehr als 1 Milliarde Zeilentabellen. Wir hatten einen ziemlich guten Repräsentanten dafür, Systeme online unter hoher Last zu halten.
Mrdenny
11

Die richtige Antwort hängt stark von der Plattform ab, für die Sie programmieren.

Es ist einfach so, dass jemand diese Frage vor ungefähr 1,5 Jahren für eine bestimmte Plattform in StackOverflow gestellt hat.

Ob MySQL, SQL Server, Oracle, PostgreSQL oder ein anderes RDBMS - Sie müssen mit der Datenbankinfrastruktur sehr kreativ sein. Wenn Sie ein offenes Scheckheft für Hardware und ein DBMS mit industrieller Stärke haben, ist Oracle genau das Richtige für Sie (in der Tat wäre Oracle RAC wünschenswerter). Wenn Sie mit IIS und einer Microsoft-Umgebung entwickeln, handelt es sich vollständig um SQL Server. Wenn Sie Budgetprobleme haben und ein Oracle-Erscheinungsbild wünschen, hilft Ihnen PostgreSQL. Wenn Sie Budgetprobleme haben, eine lebhafte Vorstellungskraft haben und die Storage Engine nach Ihren Wünschen verwalten möchten, um ACID-Konformität, Hochgeschwindigkeitslesevorgänge und eine Vielzahl von Replikationsarchitekturen zu berücksichtigen, würde ich MySQL vorurteilsvoll sagen.

Das DBMS sollte Ihre geringste Sorge mit MMORPG sein. Programmierprobleme stellen immer größere Fische zum Braten dar. Treffen Sie Ihre Entscheidung also umsichtig und mit Bedacht, denn unabhängig von Ihrem gewählten DBMS müssen Sie damit leben ( genauso wie FaceBook mit MySQL leben muss ).

RolandoMySQLDBA
quelle
2
Das ist der dritte Hinweis, den ich heute auf diesen Facebook-Artikel gesehen habe. Es ist ein ziemlich guter Artikel.
Mrdenny
2
+1. MySQL wird normalerweise übersehen, aber es ist ein wirklich leistungsfähiges RDBMS.
Stanley Johns
7

Das ist nicht die richtige Frage. Die Leistung Ihres Spiels hängt von der vollständigen Architektur und dem Technologie-Stack ab, den Sie auswählen, und davon, wie es implementiert wird. Das DBMS ist nur eine Komponente des Stapels. Ich würde die Vermutung wagen, dass das DBMS wahrscheinlich keinen einschränkenden Faktor für die Leistung darstellt, es sei denn, Sie entwickeln die Dinge sehr schlecht. Ihre Domain-Ebene, das Cacheing und die Art und Weise, wie Sie die Site verteilen und skalieren, scheinen wahrscheinlich viel wichtiger zu sein.

nvogel
quelle
5

Jedes RDBMS wird mit der Skalierung heruntergefahren, je nachdem, wie es konfiguriert, skaliert und wie die Anwendung es verwendet.

Ich denke, Sie haben zwei Fragen in einer. Das erste: "Welche DBMS sind in der Lage, Spieldaten auf effiziente Weise zu speichern?" (subjektiv, imho) Die zweite Frage: "Wie skaliere ich dieses DBMS, um es mit Tausenden von Benutzern auszuführen?"

Viele Onlinedienste haben die Kombination von MySQL und Memcached gefunden, um eine hervorragende Leistung und Skalierbarkeit zu erzielen. Es kommt jedoch ein Punkt, an dem auch diese Lösung herunterfällt. Es könnte jedoch genau das sein, was Sie brauchen.

Immer mehr Online-Dienste integrieren eine NoSQL-Lösung in ihre Architektur. Ich habe einige Erfahrungen mit CouchBase und finde es nützlich.

randomx
quelle
4

Code, Design und Ihre Festplatten (für Schreibvorgänge) bestimmen im Allgemeinen die Leistung. Nicht die Plattform.

gbn
quelle
2

Sie könnten einen Blick auf CUBRID werfen . Es ist ein Open-Source-RDBMS, das derzeit in Südkorea sehr "heiß" ist. Es wird angenommen, dass es für Webanwendungen mit einer hohen Anzahl von Benutzern am besten / sehr schnell funktioniert (sie sagen 50.000 oder so etwas).

Bart Meinfield
quelle
CUBRID ist nicht nur ein relationales DBMS, sondern bietet auch Objektfunktionen . Der Objektteil ist genau das, was Spieleentwickler benötigen. In CUBRID können Sie einfach benutzerdefinierte Typen erstellen. Z.B. Eine Tabelle kann eine Spalte haben, die einen Datentyp als eine andere Tabelle hat, wie z. B.: CREATE TABLE a (ID INTEGER AUTO_INCREMENT PRIMARY KEY, Name VARCHAR (255)); TABELLE ERSTELLEN b (ID INTEGER AUTO_INCREMENT PRIMARY KEY, custom_column a); Diese Art von Funktionalität ist für Spieleentwickler sehr wertvoll. Beliebte Online-Spiele in Südkorea basieren auf CUBRID.
Auge
2

Ich denke, dass jede der großen Datenbanken die Last bewältigen kann, wenn sie gut entworfen ist. Leider würde ich schätzen, dass weniger als 1% aller Datenbanken gut gestaltet sind. (Ich habe mich persönlich mit Daten aus buchstäblich Tausenden verschiedener Datenbanken befasst, die eine Vielzahl von Funktionen ausführen, daher denke ich, dass ich eine gute Vorstellung von der mangelnden Qualität habe, die es in der realen Welt gibt.)

Ich würde dringend empfehlen, dass Sie einige Bücher über Leistungsoptimierung für die von Ihnen ausgewählte Datenbank erhalten und diese gründlich lesen, bevor Sie mit dem Entwerfen beginnen. Es gibt viele Dinge, die dazu beitragen, dass Ihre Datenbank eine bessere Leistung erbringt, die von Anfang an berücksichtigt werden sollten. Nur zu wissen, wie performante Abfragen und Designindizes geschrieben werden, ist entscheidend für ein gutes Design. Diese Art von Studie und eingebauter Leistung ist keine vorzeitige Optimierung. Es gibt überhaupt keinen Grund, bekannte Performance-Killing-Techniken für das Design zu verwenden. Datenbanken müssen von Anfang an auf Leistung ausgelegt sein.

HLGEM
quelle
0

Wir haben Handyspiele mit Tausenden von Spielern und wir haben einen enormen Lastabfall festgestellt, indem wir auf dauerhafte IIS / .NET-MySQL-Verbindungspools umgestiegen sind. MySQL 5.1

Denken Sie daran, "nur schreiben" -Daten an einem anderen Ort zu speichern, um die Belastung der von Ihnen gewählten Datenbank Cassandra oder Syslog zu verringern. Denken Sie daran, sich schnell ändernde, sehr vorübergehende, aber rekonstruierbare Daten in einer nosql-Datenbank wie Memcache, Riak usw. zu behalten.

Anne Mouse
quelle