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)?
sql-server
mysql
database-design
rdbms
scalability
Simon Verbeke
fuente
fuente
Respuestas:
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.
fuente
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.
fuente
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 ).
fuente
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.
fuente
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.
fuente
El código, el diseño y sus discos (para escrituras) determinan el rendimiento en general. No la plataforma.
fuente
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í).
fuente
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.
fuente
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.
fuente