Quais DBMS são rápidos o suficiente para um jogo online (alguns milhares de jogadores)? [fechadas]


8

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)?


Apenas como ponto de referência, o World Of Warcraft é baseado no Oracle.
precisa saber é o seguinte

Qualquer que seja o DBMS que você escolher, não se esqueça de levar em consideração o licenciamento. Talvez sua versão gratuita seja adequada para pequenas cargas, mas se e quando você precisar aumentar ou diminuir a escala, poderá ocorrer um grave caso de choque com o adesivo.
datagod

Respostas:


24

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.


Bem, eu só precisava de uma orientação. Não é que um pequeno jogo indie atinja milhares de usuários simultâneos imediatamente. Obrigado!
Simon Verbeke 07/07

3
Embora você não esteja planejando atingir milhares de usuários de imediato, se não planejar corretamente desde o início, acabará em uma situação em que precisará sofrer uma grande interrupção ou pelo menos sofrer uma grande desaceleração. por um tempo, enquanto você trabalha na solução dos problemas.
mrdenny

Certo, e aqui está um artigo oportuno, explicando como o Facebook está sentindo a queimadura por suas decisões iniciais de design, com base em argumentos "nunca ficaremos grandes": gigaom.com/cloud/… ... acabei de notar que este artigo também foi mencionado na resposta de Rolando
Aaron Bertrand

@ Aaron: Coisas boas. +1 para você responder, porque as infra-estruturas de software em torno do MMORPG devem ser agnostgic de banco de dados e ainda se comportar !!!
RolandoMySQLDBA

12

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.


É bom saber essas informações sobre o GameSpy, especialmente desde que eu as usei. Nunca soube da parte SQL o tempo todo.
StanleyJohns

11
Não se esqueça, na época a versão mais recente era o SQL 2000 e temos mais de 1 bilhão de tabelas de linhas. Tivemos um bom representante para manter os sistemas on-line sob alta carga.
21711

11

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 ).


2
Essa é a terceira referência que eu vi naquele artigo do Facebook hoje. É um artigo muito bom.
22411 mrdenny

2
+1. O MySQL geralmente é ignorado, mas é um RDBMS realmente poderoso.
precisa

7

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.


5

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.


4

Código, design e seus discos (para gravações) determinam o desempenho em geral. Não é a plataforma.


2

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).


O CUBRID, de fato, não apenas um DBMS relacional, mas também fornece a funcionalidade do objeto . A parte do objeto é exatamente o que os desenvolvedores de jogos precisam. No CUBRID, você pode criar facilmente tipos definidos pelo usuário. Por exemplo. uma tabela pode ter uma coluna, que possui um tipo de dados como outra tabela como: CREATE TABLE a (id INTEGER AUTO_INCREMENT PRIMARY KEY, nome VARCHAR (255)); CRIAR TABELA b (id INTEGER AUTO_INCREMENT PRIMARY KEY, custom_column a); Esse tipo de funcionalidade é altamente valioso para desenvolvedores de jogos. Jogos online populares na Coréia do Sul são baseados no CUBRID.
Eye

2

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.


0

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.