Quels SGBD sont assez rapides pour un jeu en ligne (quelques milliers de joueurs)? [fermé]


8

Je fais actuellement un jeu MMORPG, qui pourrait avoir plusieurs milliers de joueurs en ligne en même temps (probablement pas; juste un vœu pieux). Nous voulions d'abord utiliser MySQL, mais j'ai entendu dire qu'il n'était pas assez rapide pour cette échelle.

Quel SGBD est assez rapide? À quoi ressemble SQL Server (comme j'ai appris SQL Server à l'école)?


À titre de référence, World Of Warcraft est basé sur Oracle.
Philᵀᴹ

Quel que soit le SGBD que vous choisissez, n'oubliez pas de prendre en compte les licences. Peut-être que votre version gratuite convient pour de petites charges, mais si et quand vous devez augmenter ou réduire, vous pouvez rencontrer un cas grave de choc autocollant.
datagod

Réponses:


24

C'est une question vraiment difficile à répondre. Vous pouvez prendre la plate-forme de base de données la plus rapide au monde, concevoir un schéma horrible, écrire une application merdique autour d'elle, puis être tenté de blâmer la plate-forme de base de données. Dans le même temps, vous pouvez utiliser gratuitement SQL Server Express et, avec la bonne conception, la logique d'application et une approche d'évolutivité raisonnable (par exemple, la mise à l'échelle des lectures par la mise en cache des données, etc.), vous pouvez écrire une application qui gère des milliers de utilisateurs aucun problème.

Dois-je croire que SQL Server peut gérer des milliers d'utilisateurs? Absolument. Dois-je croire qu'Oracle et DB2 peuvent également le faire? Certainement. MySQL? Pas sûr, pas assez d'expérience là-bas. Accès? Probablement pas un choix judicieux du tout. Si vous êtes familier avec SQL Server, je suggère que c'est la voie que vous envisagez, gardez à l'esprit que votre choix de SGBDR ne dictera pas en soi le succès ou l'échec.


Eh bien, j'avais juste besoin d'une ligne directrice. Ce n'est pas qu'un petit jeu indépendant atteindra immédiatement des milliers d'utilisateurs simultanés. Merci!
Simon Verbeke

3
Bien que vous ne prévoyiez pas de toucher des milliers d'utilisateurs à la fois, si vous ne planifiez pas correctement depuis le début, vous vous retrouverez dans une situation où vous devrez faire une panne importante ou au moins avoir un ralentissement majeur. pendant un certain temps, pendant que vous travaillez à résoudre les problèmes.
mrdenny

À droite, et voici un article opportun expliquant comment Facebook ressent maintenant la brûlure pour ses décisions de conception initiales basées sur des arguments "nous n'obtiendrons jamais d'énormes": gigaom.com/cloud/… ... je viens de remarquer que cet article a également été référencé dans la réponse de Rolando
Aaron Bertrand

@Aaron: De bonnes choses. +1 pour vous répondez car les infrastructures logicielles autour des MMORPG devraient être indépendantes de la base de données et se comporter toujours !!!
RolandoMySQLDBA

12

Permettez-moi de le dire ainsi, vous vous souvenez de GameSpy Arcade du début / milieu des années 2000? Il exécutait des milliers de jeux et fonctionnait tous sur SQL Server et supportait des dizaines de milliers d'utilisateurs à la fois (oui, nous avions plusieurs serveurs SQL là-bas faisant diverses choses). Tout dépend de la conception de la base de données et de la façon dont vous utilisez le système. Faites-le correctement et votre projet réussira, faites-le incorrectement et votre projet échouera, mal.


Ravi de connaître ces informations sur GameSpy, surtout depuis que je les ai utilisées. Je n'ai jamais connu la partie SQL pendant tout ce temps.
StanleyJohns

1
N'oubliez pas, à l'époque, la dernière version était SQL 2000 et nous avons plus de 1 milliard de tables de lignes. Nous avions un assez bon représentant pour garder les systèmes en ligne sous une charge élevée.
mrdenny

11

La bonne réponse dépend beaucoup de la plate-forme pour laquelle vous programmez.

Il se trouve que quelqu'un a posé cette question pour une plate-forme spécifique dans StackOverflow il y a environ 1,5 an.

Que ce soit MySQL, SQL Server, Oracle, PostgreSQL ou un autre SGBDR, vous devez être très créatif avec l'infrastructure de base de données. Si vous avez un chéquier ouvert pour le matériel et un SGBD de qualité industrielle, Oracle est pour vous (si en fait, Oracle RAC serait plus souhaitable). Si vous développez à l'aide d'IIS et d'un environnement Microsoft, il s'agit de SQL Server jusqu'au bout. Si vous avez des soucis budgétaires et que vous voulez une apparence Oracle, PostgreSQL à la rescousse. Si vous avez des problèmes budgétaires, une imagination débordante et que vous souhaitez microgérer le moteur de stockage à votre guise pour prendre en charge la conformité ACID, les lectures à grande vitesse et une variété d'architectures de réplication, je dirais de manière préjudiciable MySQL.

Le SGBD devrait être le moindre de vos soucis avec MMORPG. Les problèmes de programmation présentent toujours de plus gros poissons à faire frire. Alors, prenez votre décision avec prudence et sagesse, car quel que soit le SGBD que vous choisissez, vous devez vivre avec (de la même manière que FaceBook doit vivre avec MySQL ).


2
C'est la troisième référence que j'ai vue à cet article Facebook aujourd'hui. C'est un très bon article.
mrdenny

2
+1. MySQL est généralement négligé, mais c'est un SGBDR vraiment puissant.
StanleyJohns

7

Ce n'est pas la bonne question. Les performances de votre jeu dépendront de l'architecture complète et de la pile technologique que vous choisirez et de la façon dont il sera mis en œuvre. Le SGBD n'est qu'un composant de la pile. Je risquerais de deviner qu'il est peu probable que le SGBD soit un facteur limitant les performances, à moins que vous architecturiez les choses très mal. Votre couche de domaine, le cache et la façon dont vous distribuez et développez le site semblent être des préoccupations beaucoup plus importantes.


5

Tout SGBDR tombera avec l'échelle en fonction de la façon dont il est configuré, mis à l'échelle et comment l'application l'utilise.

Je pense que vous avez deux questions en une. Le premier, "quels SGBD sont capables de conserver les données de jeu de manière efficace." (subjective, à mon humble avis) La seconde, "comment puis-je faire évoluer ce SGBD pour qu'il fonctionne avec des milliers d'utilisateurs?"

De nombreux services en ligne ont trouvé la combinaison de MySQL et Memcached pour fournir d'excellentes performances et évolutivité. Cependant, il arrive un moment où cette solution échoue également. Cependant, cela pourrait être exactement ce dont vous avez besoin.

De plus en plus de services en ligne prennent en sandwich une solution NoSQL dans leur architecture. J'ai une certaine expérience avec CouchBase et je le trouve utile.


4

Le code, la conception et vos disques (pour les écritures) déterminent généralement les performances. Pas la plateforme.


2

Vous pouvez jeter un œil à CUBRID . C'est un SGBDR open source qui est très "chaud" en Corée du Sud en ce moment. Il est supposé fonctionner le mieux / très rapidement pour les applications Web avec un grand nombre d'utilisateurs (ils disent 50k ou quelque chose comme ça).


CUBRID, en fait, non seulement un SGBD relationnel, mais fournit également des fonctionnalités d' objet . La partie objet est exactement ce dont les développeurs de jeux ont besoin. Dans CUBRID, vous pouvez facilement créer des types définis par l'utilisateur. Par exemple. une table peut avoir une colonne, qui a un type de données comme une autre table comme: CREATE TABLE a (id INTEGER AUTO_INCREMENT PRIMARY KEY, name VARCHAR (255)); CREATE TABLE b (id INTEGER AUTO_INCREMENT PRIMARY KEY, custom_column a); Ce type de fonctionnalité est très précieux pour les développeurs de jeux. Les jeux en ligne populaires en Corée du Sud sont basés sur CUBRID.
Eye

2

Je pense que n'importe laquelle des principales bases de données peut gérer la charge si elle est bien conçue. Malheureusement, j'estimerais que moins de 1% de toutes les bases de données sont bien conçues. (J'ai personnellement traité des données provenant de milliers de bases de données différentes exécutant une grande variété de fonctions, donc je pense que j'ai une bonne idée du manque de qualité qui existe dans le monde réel.)

Je vous suggère fortement d'obtenir des livres sur le réglage des performances de la base de données que vous choisissez et de les lire attentivement avant de commencer à concevoir. Il y a beaucoup de choses qui aideront votre base de données à mieux fonctionner et qui devraient être conçues dès le départ. Le simple fait de savoir comment écrire des requêtes performantes et des index de conception est essentiel pour obtenir une bonne conception. Ce type d'étude et de performance intégrée n'est pas une optimisation prématurée. Il n'y a aucune raison d'utiliser des techniques connues de destruction des performances dans la conception. Les bases de données doivent être conçues pour les performances dès le départ.


0

Nous avons des jeux mobiles avec des milliers de joueurs et nous avons vu une énorme baisse de charge en allant aux pools de connexions persistantes IIS / .NET mysql. mysql 5.1

Pensez à conserver les données «en écriture seule» ailleurs pour réduire la charge sur la base de données que vous choisissez Cassandra ou syslog même. Pensez à conserver des données à évolution rapide, hautement transitoires mais reconstructibles dans une base de données nosql comme memcache, riak, etc.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.