Como faço para criar rapidamente novas instâncias do banco de dados MySQL complexo?

2

Estou gerenciando um aplicativo da web corporativo que usa o RDS da Amazon como nosso servidor de banco de dados. Nossa arquitetura é tal que, quando um usuário se inscreve para uma nova conta, criamos um novo banco de dados para eles no RDS.

O banco de dados tem cerca de 63 tabelas, a maioria com índices e quase todas com restrições de chave estrangeira. Atualmente estamos criando cada novo banco de dados, executando um grande conjunto de instruções sql. Isso leva em média 57 segundos.

Alguém tem alguma ideia de como eu poderia fazer isso de forma mais rápida ou eficiente?

    
por Mel Green 08.11.2011 / 20:11

3 respostas

0

Agradeço a todos pelas sugestões, finalmente encontrei uma solução muito boa e queria compartilhá-la aqui para futuros leitores!

Por fim, consegui ajustar nossa arquitetura de banco de dados, combinando / removendo algumas tabelas, o que simplificou o design geral e reduziu o tempo necessário para executar o script de criação. Eu também reescrevi nosso script de criação para que ele executasse uma consulta por tabela em vez de três consultas (uma para criar a tabela, segunda para alterar a tabela para adicionar os índices, terceira para criar as chaves estrangeiras). Essas duas coisas deram uma grande melhoria na execução do script, ele passou de cerca de 50 segundos em média para 8 segundos!

Outra coisa que fizemos e que faz uma grande diferença para a experiência do usuário foi criar um serviço que seja executado independentemente em um de nossos servidores, que não fará nada além de criar novos bancos de dados que ficarão vazios aguardando uma nova inscrição de usuário. Quando um usuário inscrever sua conta é simplesmente atribuído ao próximo banco de dados vazio disponível. Nós o configuramos para que o serviço de criador do banco de dados não chegue mais que 100 à frente das necessidades reais da nossa conta. Esse design diminuiu o tempo que o usuário espera ao assinar por 1 ou 2 segundos. Tudo parece um pouco "hacky", mas no final é uma grande melhoria!

    
por 08.12.2011 / 20:16
2

Você pode tentar executar a consulta como uma "transação em massa" para pular as verificações. Esteja avisado, isso pode criar índices duplicados & interrompa as verificações de consistência se você não for cuidadoso.

    
por 08.11.2011 / 21:46
1

Não há como aumentar essa velocidade, por exemplo, até 5 segundos. Eu acho que você tem que usar alguma lógica de fila e criar esse BD em segundo plano. Para os clientes, isso será apenas: "Criação de banco de dados em andamento"

    
por 08.11.2011 / 22:06