La respuesta es sí, es una opción válida, pero no, probablemente no sea una gran idea .
Hay dos problemas principales con SQL que NoSQL intenta abordar cuando se trata de juegos.
El primero es la latencia o retraso. En cierto sentido, las bases de datos SQL son increíblemente rápidas y procesan miles de transacciones o más en décimas de segundo. En otro sentido, son increíblemente lentos, porque procesar solo unas pocas transacciones puede llevar la misma cantidad de tiempo. Para la mayoría de los usos de la base de datos, esto no importa, pero los juegos tienen un componente en tiempo real, por lo que no se trata solo de cuántas transacciones puede hacer por segundo, sino también del tiempo promedio que se tarda en responder a una transacción de la base de datos.
Esta latencia es un problema importante para los juegos en tiempo real. Muchos desarrolladores que necesitan grandes bases de datos (generalmente para MMO) construyen una capa de almacenamiento en caché que se encuentra entre la base de datos y los servidores del juego para evitar estos bloqueos, y luego vacían el caché periódicamente. ¿El problema? Acaba de descartar las razones principales para usar una base de datos: atomicidad, consistencia, aislamiento y durabilidad .
Pero ese problema no se aplica a los juegos web.Ya tienes una conexión de alta latencia entre el jugador y el juego, por lo que también podrías obtener el rendimiento que proporciona SQL, así como los beneficios de un software maduro y conocido.
Sin embargo, el segundo problema se aplica a usted, y ese es el desajuste de impedancia relacional del objeto . Los juegos tratan con objetos, las bases de datos tratan con filas. Si tiene suerte, un objeto puede convertirse en una fila simplemente enumerando sus campos, pero la mayoría de las veces los objetos son jerárquicos, y debe aplanarlos de alguna manera para colocarlos en filas.
Las bases de datos basadas en documentos, como CouchDB y MongoDB, resuelven este problema promoviendo el documento al objeto de nivel superior, en lugar de la fila ("documento" en este caso es sinónimo de "objeto"). Pero al hacer esto, pierden muchos de los beneficios de las bases de datos SQL. El rendimiento es mucho menor y los algoritmos de bloqueo se vuelven mucho más complicados.
La buena noticia es que ya hay una gran cantidad de mapeo relacional de objetos (ORM) herramientas de disponibles para cualquier lenguaje que esté utilizando. Le permiten traducir entre objetos en la memoria y filas en la base de datos de manera bastante transparente. Estas herramientas generalmente no son apropiadas para juegos en tiempo real a gran escala, ya que pueden presentar los peores aspectos de rendimiento de las bases de datos SQL y NoSQL. Pero está bien para un juego web: en el peor de los casos, cuando te encuentras con problemas de rendimiento, puedes volver a hacer transacciones a la antigua. El problema de la latencia no le hace daño, y el aumento del rendimiento lo ayuda.
Finalmente, para aclarar un punto que he hecho en otra parte : no se trata de datos estáticos del juego. No estoy hablando de las descripciones de tus artículos o del daño de tu arma o los sprites o cualquier cosa aquí. Me refiero a los datos reales y mutables del juego, como lo que hay en el inventario de un jugador o cuáles son sus estadísticas. Todo lo que necesita para los datos estáticos es un almacén de datos. Tal vez resulta que lo más fácil de hacer es usar la misma base de datos que el almacén de datos porque tiene un gran ORM; tal vez solo necesites el sistema de archivos. Son dos problemas separados, y una respuesta no necesita (y probablemente no) encajar en ambos casos.