Atualmente, estou criando um jogo MMORPG, que pode ter alguns milhares de jogadores online ao mesmo tempo (provavelmente não; apenas ilusões). Primeiro, queríamos usar o MySQL, mas ouvi dizer que não é rápido o suficiente para esta escala.
Qual DBMS é rápido o suficiente? Quanto é o SQL Server (como eu aprendi o SQL Server na escola)?
sql-server
mysql
database-design
rdbms
scalability
Simon Verbeke
fonte
fonte
Respostas:
Esta é uma pergunta muito difícil de responder. Você pode usar a plataforma de banco de dados mais rápida do mundo, projetar um esquema horrível, escrever um aplicativo de baixa qualidade e, em seguida, ficar tentado a culpar a plataforma de banco de dados. Ao mesmo tempo, você pode usar o SQL Server Express gratuito e, com o design certo, a lógica do aplicativo e uma abordagem com escalabilidade razoável (por exemplo, dimensionar leituras por cache de dados, etc.), você pode escrever um aplicativo que lide com milhares de usuários não há problema.
Acredito que o SQL Server possa lidar com milhares de usuários? Absolutamente. Eu acredito que Oracle e DB2 também podem fazer isso? Certamente. MySQL? Não tenho certeza, não há experiência suficiente lá. Acesso? Provavelmente não é uma escolha sábia. Se você conhece o SQL Server, sugiro que esse seja o caminho que você considera, mas lembre-se de que sua escolha de RDBMS não dita por si só sucesso ou fracasso.
fonte
Deixe-me colocar desta forma, lembra-se do GameSpy Arcade do início / meados dos anos 2000? Ele rodava milhares de jogos e rodava no SQL Server e suportava dezenas de milhares de usuários de uma só vez (sim, tínhamos vários servidores SQL fazendo várias coisas). É tudo sobre o design do banco de dados e como você usa o sistema. Faça-o corretamente e seu projeto terá êxito, faça-o incorretamente e seu projeto falhará muito.
fonte
A resposta certa depende muito da plataforma para a qual você está programando.
Acontece que alguém fez essa pergunta para uma plataforma específica no StackOverflow cerca de 1,5 anos atrás.
Seja MySQL, SQL Server, Oracle, PostgreSQL ou algum outro RDBMS, você precisa ser muito criativo com a infraestrutura de banco de dados. Se você possui um talão de cheques aberto para hardware e um DBMS de força industrial, o Oracle é para você (se for verdade, o Oracle RAC seria mais desejável). Se você estiver desenvolvendo usando o IIS e um ambiente Microsoft, é o SQL Server totalmente. Se você tiver preocupações orçamentárias e deseja uma aparência e comportamento Oracle, PostgreSQL para o resgate. Se você tiver preocupações orçamentárias, uma imaginação vívida e quiser microgerenciar o Storage Engine ao seu gosto para acomodar a conformidade com ACID, leituras de alta velocidade e uma variedade de arquiteturas de replicação, eu diria prejudicialmente o MySQL.
O DBMS deve ser a menor das suas preocupações com o MMORPG. Questões de programação sempre apresentam peixes maiores para fritar. Portanto, tome sua decisão com prudência e sabedoria, porque qualquer DBMS que você escolher, você terá que conviver com ela ( da mesma forma que o FaceBook tem que conviver com o MySQL ).
fonte
Esta não é a pergunta certa. O desempenho do seu jogo dependerá da arquitetura e tecnologia completas que você escolher e de como ele será implementado. O DBMS é apenas um componente da pilha. Eu arriscaria supor que é improvável que o DBMS seja um fator limitante no desempenho, a menos que você arquitete as coisas muito mal. Sua camada de domínio, cache e como você distribui e dimensiona o site parece ser uma preocupação muito mais importante.
fonte
Qualquer RDBMS cairá em escala, dependendo de como é configurado, dimensionado e de como o aplicativo o utiliza.
Me pensa, você tem duas perguntas em uma. A primeira, "quais DBMS são capazes de manter os dados do jogo de maneira eficiente". (subjetivo, imho) O segundo, "como dimensiono esse DBMS para executar com milhares de usuários?"
Muitos serviços online encontraram a combinação do MySQL e do Memcached para fornecer excelente desempenho e escala. No entanto, chega um ponto em que essa solução também cai. No entanto, pode ser exatamente o que você precisa.
Mais e mais serviços online estão imprensando em uma solução NoSQL em sua arquitetura. Tenho alguma experiência com o CouchBase e acho útil.
fonte
Código, design e seus discos (para gravações) determinam o desempenho em geral. Não é a plataforma.
fonte
Você pode dar uma olhada no CUBRID . É um RDBMS de código aberto muito "quente" na Coréia do Sul no momento. Supõe-se que funcione melhor / realmente rápido para aplicativos da Web com alto número de usuários (eles dizem 50k ou algo assim).
fonte
Eu acho que qualquer um dos principais bancos de dados pode lidar com a carga se bem projetado. Infelizmente, eu estimaria que menos de 1% de todos os bancos de dados foram projetados bem. (Eu pessoalmente lidei com dados de literalmente milhares de bancos de dados diferentes, executando uma ampla variedade de funções, então acho que tenho uma boa idéia da falta de qualidade existente no mundo real.)
Eu sugiro fortemente que você obtenha alguns livros sobre ajuste de desempenho para o banco de dados escolhido e leia-os detalhadamente antes de começar a projetar. Há muitas coisas que ajudarão seu banco de dados a ter um desempenho melhor e que devem ser projetadas desde o início. Saber como escrever consultas de alto desempenho e índices de design é fundamental para obter um bom design. Esse tipo de estudo e desempenho projetado não é uma otimização prematura. Não há nenhuma razão para usar técnicas conhecidas de redução de desempenho no design. Os bancos de dados precisam ser projetados para desempenho desde o início.
fonte
Temos jogos para celular com milhares de jogadores e vimos uma enorme queda na carga, indo para os persistentes pools de conexões mysql do IIS / .NET. mysql 5.1
Pense em manter os dados "somente gravação" em outro lugar para reduzir a carga em qualquer banco de dados que você escolher, mesmo o Cassandra ou o syslog. Pense em manter os dados altamente transitórios, altamente transitórios, mas reconstrutíveis em um banco de dados nosql, como memcache, riak, etc.
fonte