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)?
sql-server
mysql
database-design
rdbms
scalability
Simon Verbeke
quelle
quelle
Antworten:
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.
quelle
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.
quelle
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 ).
quelle
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.
quelle
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.
quelle
Code, Design und Ihre Festplatten (für Schreibvorgänge) bestimmen im Allgemeinen die Leistung. Nicht die Plattform.
quelle
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).
quelle
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.
quelle
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.
quelle