O site em que estou trabalhando tem muita atividade de back-end/cron, então há entre 5 e 15 consultas sendo executadas a cada segundo do dia. Isso pode retardar o carregamento da página em um segundo ou mais.
Eu estava pensando que a melhor coisa a fazer seria criar dois bancos de dados e sincronizá-los diariamente. No entanto:
- eu não sei como fazer isso
- Estou preocupado que a sincronização seja lenta e bloqueie o acesso ao banco de dados. Eu realmente não gosto da ideia de deixar o site offline, mesmo que por 10 minutos às 3 da manhã.
Então eu me pergunto:
- Bancos de dados separados são a melhor solução para esse problema ou outra coisa seria melhor?
- Como eu sincronizaria o banco de dados sem interferir muito na 'experiência do usuário'?
Muito obrigado!
BTW rodando PHP/MySQL em servidores 'poderia'.
De seus comentários, uma solução pode ser fazer uma configuração de replicação Master-Slave (link para replicação mysql aqui )
Eu tornaria o back-end o mestre e o front-end o escravo. Se o seu front-end precisar escrever (formulários de contato, rastreamento, etc.), você atualizará seu código no front-end para ler do escravo e gravar no mestre.
A desvantagem é que, dependendo da carga, suas gravações de back-end podem atrasar alguns segundos ou mais. Mas, como anedota, tenho um servidor que lida com 120 comandos / segundo (média, conforme relatado por munin) e o servidor escravo não está atrasado em mais de 3 segundos.
Empregar o uso de escravos somente leitura.
Mapeie todas as consultas SELECT para esses escravos somente leitura.
Converta todas as tabelas em cada escravo somente leitura para o mecanismo de armazenamento MyISAM com a opção
ROW_FORMAT=FIXED
de leituras mais rápidasEmpregar o uso de um mestre de distribuição . Isso removeria o trabalho de executar a replicação do MySQL longe do mestre do banco de dados onde ocorrem as gravações principais do banco de dados.
Se você estiver usando o MySQL 5.5, poderá usar a Replicação Semissíncrona para obter o primeiro escravo com o mínimo de "Seconds_Behind_Master" o máximo possível.
Você está pensando em "criar dois bancos de dados e sincronizá-los diariamente", o que outros sugeriram ser viável se um puder ser um escravo somente leitura - no entanto, se ambos precisam ser lidos e gravados, você está em Multi Master Replication , que é um campo minado para dizer pelo menos. Nesse caso, jogar hardware mais caro no problema provavelmente acabaria mais barato.