A resposta é sim, é uma opção válida, mas não, provavelmente não é uma ótima ideia .
Existem dois grandes problemas com o SQL que o NoSQL tenta solucionar quando se trata de jogos.
O primeiro é a latência ou atraso. Em um sentido, os bancos de dados SQL são incrivelmente rápidos, processando milhares de transações ou mais em décimos de segundo. Em outro sentido, eles são incrivelmente lentos, porque o processamento de apenas algumas transações pode levar a mesma quantidade de tempo. Para a maioria dos usos de banco de dados, isso não importa, mas os jogos têm um componente em tempo real; portanto, não se trata apenas de quantas transações você pode fazer por segundo, mas do tempo médio necessário para responder a uma transação de banco de dados.
Essa latência é um grande problema para jogos em tempo real. Muitos desenvolvedores que precisam de bancos de dados grandes (geralmente para MMOs) criam uma camada de cache que fica entre o banco de dados e os servidores de jogos, a fim de evitar essas paralisações e, em seguida, liberam o cache periodicamente. O problema? Você acabou de apresentar os principais motivos para usar um banco de dados - atomicidade, consistência, isolamento e durabilidade .
Mas esse problema não se aplica a jogos da web. Você já possui uma conexão de alta latência entre o jogador e o jogo, para obter a taxa de transferência que o SQL fornece, além dos benefícios de um software conhecido e maduro.
O segundo problema, no entanto, se aplica a você, e essa é a incompatibilidade de impedância objeto-relacional . Jogos lidam com objetos, bancos de dados lidam com linhas. Se você tiver sorte, um objeto pode ser transformado em uma linha apenas listando seus campos, mas na maioria das vezes os objetos são hierárquicos e você precisa achatá-los de alguma forma para colocá-los em linhas.
Bancos de dados baseados em documentos, como CouchDB e MongoDB, resolvem esse problema promovendo o documento para o objeto de nível superior, em vez de linha ("documento" nesse caso é sinônimo de "objeto"). Mas, ao fazer isso, eles perdem muitos dos benefícios dos bancos de dados SQL. A taxa de transferência é muito menor e os algoritmos de bloqueio se tornam muito mais complicados.
A boa notícia é que já existem muitos mapeamentos objeto-relacionais (ORM) ferramentas de disponíveis para qualquer idioma que você esteja usando. Eles permitem traduzir entre objetos na memória e linhas no banco de dados de forma bastante transparente. Essas ferramentas geralmente não são apropriadas para jogos em tempo real de larga escala, porque podem apresentar os piores aspectos de desempenho dos bancos de dados SQL e NoSQL. Mas tudo bem para um jogo na Web - na pior das hipóteses, quando você encontra problemas de desempenho, pode voltar a fazer transações da maneira antiga. O problema de latência não o prejudica e o aumento da taxa de transferência ajuda você.
Finalmente, para enfatizar um argumento que já fiz em outro lugar : não se trata de dados estáticos do jogo. Não estou falando das descrições dos itens ou dos danos ou sprites da arma ou qualquer coisa aqui. Quero dizer os dados reais e mutáveis do jogo, como o que está no inventário de um jogador ou quais são suas estatísticas. Tudo o que você precisa para os dados estáticos é um armazenamento de dados. Talvez a coisa mais fácil de fazer seja usar o mesmo banco de dados que o armazenamento de dados para isso, porque você tem um ótimo ORM; talvez você só precise do sistema de arquivos. São dois problemas separados, e uma resposta não precisa (e provavelmente não vai) se encaixar nos dois casos.