Arquitetura escalonável de banco de dados para leitura pesada e gravação pesada?

1

Estou desenvolvendo um aplicativo da Web que exigirá dimensionamento para vários servidores. Precisarei de vários servidores da web executando o código do meu aplicativo e haverá leituras pesadas e gravações pesadas no banco de dados. Obviamente, não posso usar apenas um banco de dados.

Eu lidei com replicação de banco de dados onde havia um único mestre e vários escravos. Com isso, tínhamos vários servidores API somente leitura, cada um com um servidor dedicado e um banco de dados escravo dedicado (replicado).

Mas como eu lidaria com as gravações? Parece que seria uma má ideia ter todas as gravações ocorrendo em um único banco de dados devido ao engarrafamento e, em vez disso, eu gostaria de gravar em vários bancos de dados separados. Mas então eu teria vários bancos de dados mestres, e posso imaginar que seria um desastre se os mestres estivessem fora de sincronia. E eu poderia imaginar que haveria colisões de chave primária.

Outra opção pode ser ter vários bancos de dados com o mesmo esquema, mas cada um não é uma cópia do outro. Isso soa assustador, como se poderia falhar, e eu perderia dados. Isso parece um pesadelo de manutenção, mas talvez eu esteja errado.

O que seria uma arquitetura boa, testada, prática e escalável para as necessidades que descrevi? Links para artigos ou apenas posts aqui seriam ótimos.

    
por Chad Johnson 11.11.2010 / 23:55

3 respostas

3

Não há nada remotamente próximo de um tamanho único aqui, mas se você está procurando ir além das soluções de bancos de dados relacionais tradicionais, sugiro que você faça o "NoSQL" do Google e comece a ler.

    
por 12.11.2010 / 00:02
2

resposta curta: sharding

resposta longa: você desenvolve sua própria camada "nosql" no topo de um sql db (geralmente mysql) ou usa uma das muitas ferramentas nosql de tópico quente (mongodb, cassandra, redis, etc).

no entanto já que sua postagem incluiu zero métricas, é extremamente improvável que você realmente precise fazer isso, se você estivesse no modo de números. O mais provável é que você consiga uma dose saudável de memória RAM e algum tempo gasto ajustando as consultas SQL ou um grande valor de armazenamento SSD / high-end.

    
por 12.11.2010 / 00:48
1

Se você pode ajustar seus dados de forma diferente para tabelas relacionais padrão do que eu consideraria NoSQL ..

Um armazenamento de dados de cluster de estilo de gravação pesado seria cassandra (NoSQL) Ele é projetado para escrever sem bloqueio ...: D

Caso contrário .. Tentativa de fragmentação com SQL e, como as empresas maiores às vezes fazem, execute o mysql em um master < --- > configuração principal ..

Que tipo de dados é escrito e lido?

    
por 12.11.2010 / 00:26