Pergunta

Uma vez que um dia eu precisar atualizar uma tabela MySQL com um novo arquivo baixado da Net usando ftp e, em seguida, mysqlimport. No entanto, quero meu site para manter em funcionamento durante a operação mysqlimport, que leva algum tempo (é uma grande mesa). O que seria uma boa maneira de garantir que os usuários não espere para a importação ao fim? Estou pensando em importar para uma tabela temporária e, em seguida, renomeá-lo. Isso é um bom plano?

Foi útil?

Solução

Um fato pouco conhecido é que você pode concatenar mais de uma instrução de mudança de nome no mysql e ele irá executar todo o nome muda atomicamente.

create table newtable like oldtable;
insert into newtable .......
rename table oldtable to deleteme, newtable to oldtable;
drop table deleteme;

A tabela de renomeação irá bloquear leitores (na verdade ele irá bloquear qualquer resolução do nome), mas deve ser uma operação muito rápida.

Outras dicas

Se for um caso de uma atualização incremental, você poderia simplesmente acelerador a inserção de novos dados via cron / agendamento.

Load XYZ registra a cada minuto, ver se a atualização anterior tiver terminado, fazer uma lockfile, inserção atrasada, enxaguar e repetir.

Se você quiser obter real esperto sobre isso, temos o script de atualização verificar a carga do servidor em tempo de execução e ajustar o número de importações em conformidade.

Isto fará com que novos dados para aparecer em lotes, mas vai deixar você manter o site funcionando enquanto ele está sendo atualizado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top