Estou trabalhando em um jogo multiplayer em tempo real que exigirá um banco de dados (para recursos como perfis de jogadores, amigos, desbloqueios, notícias etc.) Este é um jogo para PC padrão (não baseado em navegador) e utilizará um servidor cliente arquitetura. Eu sou novo no uso de bancos de dados e fiz algumas pesquisas nos últimos dias quando me deparei com o acalorado debate: RDBMS vs NoSQL. Atualmente, estou inclinado a usar o NoSQL, mas depois de ler sobre os usos de cada um (RDBMS e NoSQL), sou tentado a usar os dois. Sei que isso pode parecer estranho, mas deixe-me explicar minha situação:
Minha equipe possui um pacote de hospedagem compartilhada que oferece armazenamento e largura de banda ilimitados de mySQL, a única ressalva é que só podemos ter 25 conexões abertas ao mesmo tempo (regra de hospedagem compartilhada). Pretendo usá-lo no meu site (um uso típico, sem dúvida), a fim de publicar atualizações de notícias, oferecer suporte a recursos da comunidade (como comentários, fazer upload de arte de fãs etc.) e similares. Tudo bem e bom - mas! é aqui que as coisas ficam interessantes ... Quero exibir essas mesmas informações que são postadas no meu site, no jogo. Isso significa usar o mySQL no meu site e no meu jogo. Além de posts de notícias e similares, pretendo usá-lo no jogo para coisas como bate-papo e uma lista de servidores. Estou preocupado com essa regra de 25 conexões principalmente.
O que me leva a fazer a pergunta nº 1: isso funcionará e existe uma alternativa melhor?
Agora, além disso, eu li sobre o desempenho do NoSQL e é adequado para jogos em tempo real (eu posso estar errado, passei por uma enorme guerra de chamas RDBMS vs NoSQL para chegar aqui e provavelmente estou queimado). Basicamente, eu gostaria de usar o MongoDB para todos os meus dados de objeto de jogo.
E, novamente, será útil se eu fornecer algum contexto: Encontrei um host (MongoLab) que oferece um pacote MongoDB de 240 MB gratuitamente, que pretendo usar até que seja necessário atualizar. Dado 240 MB, calculei que poderei armazenar aproximadamente 60.000 jogadores (se cada jogador tiver aproximadamente 4KB e ignorarmos outras coisas que possam ser armazenadas). O espaço de armazenamento e ter que pagar por mais no futuro (caso nosso jogo seja bem-sucedido) não é um problema. Atualmente, a única razão pela qual pretendo usar o MongoDB para todos os meus dados de objeto de jogo é a frequência com que esses dados serão acessados (como sempre que um jogador é morto, pega um item, dispara uma arma etc.) também como os documentos sem esquemas diretos (que facilitam o mapeamento de dados do objeto do jogo). Devo notar que, ao mesmo tempo,
Pretendo usar o mesmo MongoDB no meu site, para exibir informações do perfil do jogador (não estou preocupado com a consistência completa, há algum atraso nas atualizações do jogo). O que me leva à minha segunda pergunta, pergunta nº 2: é uma boa idéia ou há algo melhor que devo fazer?
O jogo terá uma experiência inicial semelhante a esta:
- Login do cliente (MongoDB)
- O cliente está na home page do jogo com salas de bate-papo (MySQL)
- Cliente vai para a lista de servidores (MySQL)
O cliente se conecta a um servidor e joga nele
O servidor comunica atualizações para todos os players (MongoDB)
Foi assim que imaginei que funcionaria. Isso parece bom para você ou você tem sugestões sobre como esse plano pode ser melhorado?