¿Qué DBMS son lo suficientemente rápidos para un juego en línea (unos pocos miles de jugadores)? [cerrado]


8

Actualmente estoy haciendo un juego MMORPG, que podría tener unos pocos miles de jugadores en línea al mismo tiempo (probablemente no; solo una ilusión). Primero queríamos usar MySQL, pero he oído que no es lo suficientemente rápido para esta escala.

¿Qué DBMS es lo suficientemente rápido? ¿En qué se parece SQL Server (como aprendí SQL Server en la escuela)?


Como punto de referencia, World Of Warcraft está basado en Oracle.
Philᵀᴹ

Cualquiera sea el DBMS que elija, no olvide tener en cuenta las licencias. Tal vez su versión gratuita esté bien para cargas pequeñas, pero si tiene que escalar o escalar puede experimentar un caso severo de choque de pegatina.
datagod

Respuestas:


24

Esta es una pregunta realmente difícil de responder. Puede tomar la plataforma de base de datos más rápida del mundo, diseñar un esquema horrible, escribir una aplicación horrible a su alrededor y luego sentirse tentado a culpar a la plataforma de la base de datos. Al mismo tiempo, puede tomar el SQL Server Express gratuito y, con el diseño correcto, la lógica de la aplicación y un enfoque de escalabilidad razonable (por ejemplo, escalar las lecturas mediante el almacenamiento en caché de datos, etc.), puede escribir una aplicación que maneje miles de usuarios no hay problema.

¿Creo que SQL Server puede manejar miles de usuarios? Absolutamente. ¿Creo que Oracle y DB2 también pueden hacerlo? Ciertamente. MySQL? No estoy seguro, no hay suficiente experiencia allí. ¿Acceso? Probablemente no sea una sabia elección en absoluto. Si está familiarizado con SQL Server, sugiero que esa sea la ruta que considere, solo tenga en cuenta que su elección de RDBMS no dictará por sí misma el éxito o el fracaso.


Bueno, solo necesitaba una guía. No es que un pequeño juego independiente llegue a miles de usuarios simultáneos de inmediato. ¡Gracias!
Simon Verbeke

3
Si bien es posible que no esté planeando llegar a miles de usuarios a la vez de inmediato, si no planifica correctamente desde el principio, terminará en una situación en la que tendrá que sufrir una gran interrupción o al menos una desaceleración importante por un tiempo, mientras trabajas en solucionar los problemas.
mrdenny

Correcto, y aquí hay un artículo oportuno que explica cómo Facebook ahora está sintiendo la quema por sus decisiones de diseño iniciales basadas en argumentos de "nunca obtendremos grandes": gigaom.com/cloud/… ... acabo de notar que este artículo también fue referenciado en la respuesta de Rolando
Aaron Bertrand

@ Aaron: Buenas cosas. ¡+1 por su respuesta porque las infraestructuras de software en torno a MMORPG deberían ser independientes de la base de datos y aún comportarse!
RolandoMySQLDBA

12

Déjame ponerlo de esta manera, ¿recuerdas GameSpy Arcade de principios / mediados de la década de 2000? Ejecutó miles de juegos, y todos se ejecutaban en SQL Server y admitía a decenas de miles de usuarios a la vez (sí, teníamos varios Servidores SQL allí haciendo varias cosas). Se trata del diseño de la base de datos y de cómo usa el sistema. Hágalo correctamente y su proyecto tendrá éxito, hágalo incorrectamente y su proyecto fallará gravemente.


Es bueno saber esa información sobre GameSpy, especialmente desde que la había usado. Nunca supe de la parte de SQL todo ese tiempo.
StanleyJohns

1
No lo olvide, en aquel entonces la versión más reciente era SQL 2000 y teníamos 1 000 millones de tablas de filas. Tuvimos una muy buena reputación para mantener los sistemas en línea bajo alta carga.
mrdenny

11

La respuesta correcta depende mucho de la plataforma para la que esté programando.

Sucede que alguien hizo esta pregunta para una plataforma específica en StackOverflow hace aproximadamente 1,5 años.

Ya sea MySQL, SQL Server, Oracle, PostgreSQL o algún otro RDBMS, debe ser muy creativo con la infraestructura de la base de datos. Si tiene una chequera abierta para hardware y un DBMS de potencia industrial, Oracle es para usted (de hecho, Oracle RAC sería más deseable). Si está desarrollando utilizando IIS y un entorno de Microsoft, entonces es SQL Server hasta el final. Si tiene inquietudes presupuestarias y desea una apariencia de Oracle, PostgreSQL al rescate. Si tiene inquietudes presupuestarias, una imaginación vívida y desea microgestión del Storage Engine a su gusto para acomodar el cumplimiento de ACID, lecturas de alta velocidad y una variedad de arquitecturas de replicación, diría perjudicialmente MySQL.

El DBMS debería ser la menor de sus preocupaciones con MMORPG. Los problemas de programación siempre presentan peces más grandes para freír. Por lo tanto, tome su decisión con prudencia y prudencia, porque sea cual sea el DBMS que elija, debe vivir con él (de la misma manera que FaceBook tiene que vivir con MySQL ).


2
Esa es la tercera referencia que he visto a ese artículo de Facebook hoy. Es un muy buen artículo.
mrdenny

2
+1. MySQL generalmente se pasa por alto, pero es un RDBMS realmente poderoso.
StanleyJohns

7

Esta no es la pregunta correcta. El rendimiento de su juego dependerá de la arquitectura completa y la pila de tecnología que elija y de cómo se implemente. El DBMS es solo un componente de la pila. Me arriesgaría a adivinar que es poco probable que el DBMS sea un factor limitante en el rendimiento a menos que diseñe las cosas muy mal. Es probable que su capa de dominio, el almacenamiento en caché y cómo distribuya y escale el sitio sean preocupaciones mucho más importantes.


5

Cualquier RDBMS caerá con escala dependiendo de cómo esté configurado, escalado y cómo lo utilice la aplicación.

Creo que tienes dos preguntas en una. El primero, "qué DBMS son capaces de persistir los datos del juego de manera eficiente". (subjetivo, en mi humilde opinión) El segundo, "¿cómo escalo ese DBMS para que funcione con miles de usuarios?"

Muchos servicios en línea han encontrado la combinación de MySQL y Memcached para proporcionar un excelente rendimiento y escala. Sin embargo, llega un punto en que esa solución también se cae. Sin embargo, podría ser exactamente lo que necesita.

Cada vez más servicios en línea están incorporando una solución NoSQL en su arquitectura. Tengo algo de experiencia con CouchBase y me resulta útil.


4

El código, el diseño y sus discos (para escrituras) determinan el rendimiento en general. No la plataforma.


2

Podrías echar un vistazo a CUBRID . Es un RDBMS de código abierto que está muy "de moda" en Corea del Sur en este momento. Se supone que funciona mejor / realmente rápido para aplicaciones web con un gran número de usuarios (dicen 50k o algo así).


CUBRID, de hecho, no es solo un DBMS relacional sino que también proporciona funcionalidad de objeto . La parte del objeto es exactamente lo que necesitan los desarrolladores de juegos. En CUBRID puede crear fácilmente tipos definidos por el usuario. P.ej. una tabla puede tener una columna, que tiene un tipo de datos como otra tabla como: CREATE TABLE a (id INTEGER AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR (255)); CREATE TABLE b (id INTEGER AUTO_INCREMENT PRIMARY KEY, custom_column a); Este tipo de funcionalidad es muy valiosa para los desarrolladores de juegos. Los juegos en línea populares en Corea del Sur se basan en CUBRID.
Ojo

2

Creo que cualquiera de las principales bases de datos puede manejar la carga si está bien diseñada. Lamentablemente, estimaría que menos del 1% de todas las bases de datos están bien diseñadas. (He tratado personalmente con datos de literalmente miles de bases de datos diferentes que realizan una amplia variedad de funciones, por lo que creo que tengo una buena idea de la falta de calidad que existe en el mundo real).

Le sugiero encarecidamente que obtenga algunos libros sobre ajuste de rendimiento para la base de datos que elija y los lea detenidamente antes de comenzar a diseñar. Hay muchas cosas que ayudarán a que su base de datos funcione mejor que deberían diseñarse desde el principio. Solo saber cómo escribir consultas e índices de diseño es fundamental para obtener un buen diseño. Este tipo de estudio y rendimiento diseñado no es una optimización prematura. No hay ninguna razón para usar técnicas conocidas de eliminación del rendimiento en el diseño. Las bases de datos deben diseñarse para el rendimiento desde el principio.


0

Tenemos juegos móviles con miles de jugadores y vimos una gran caída en la carga al ir a los grupos persistentes de conexión IIS / .NET mysql. mysql 5.1

Piense en mantener los datos de "solo escritura" en otro lugar para reducir la carga en cualquier base de datos que elija Cassandra o syslog incluso. Piense en mantener datos rápidamente cambiantes, altamente transitorios pero reconstruibles en una base de datos nosql como memcache, riak, etc.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.