Comece examinando a
partition
ing sua tabela se você ainda não tiver:http://dev.mysql.com/doc/refman/5.1 /en/partitioning.html
http://www.slideshare.net/datacharmer/mysql-partitions-tutorial
http ://blog.mayflower.de/archives/353-Is-MySQL-partitioning-useful-for-very-big-real-life-problems.html
Como você está 'consolidando' seus dados? Talvez o método que você está usando não seja o ideal. Uma boa abordagem (deixe-me saber se isso é realmente o que você está fazendo) é criar uma tabela que contenha dados agregados. Então configure assim:
Primeiro, deixando de lado como os dados estão sendo despejados em sua tabela principal ...
-
Crie um trabalho (cron ou qualquer outro que você tenha à mão ou já configurado) que seja executado em um intervalo especificado, relativo a como os dados são carregados na tabela principal (vamos chamá-lo deMAIN
, avançando). Se sua tabela MAIN for carregada a cada hora, sincronize-a. De meia hora? Não importa. Você pode verificar a velocidade de qualquer maneira ou, se estiver perto do horário de pico em que seus relatórios são executados, agende próximo a esse horário
-
Indexe corretamente sua tabela para dados consolidados. Vamos chamá-lo deAGG
avançando.
-
Crie um procedimento armazenado que carregue dados de MAIN para AGG, que é basicamente umAGG LOAD FOR INTERVAL-?
. Claro, você é o único aqui que sabe como ou quando os dados são inseridos no MAIN, então você também será aquele que sabe qual é a intenção de agregação. Também é possível continuar executando o procedimento armazenado de agregação se a intenção de agregação não for concluída (digamos que seja por um dia inteiro .. portanto, é uma execução cumulativa até que seja definida)
-
UseSTAGING
mesas. Para mim, eles são os melhores .
-
Crie um procedimento armazenado que verifique novamente os dados, para que qualquer atualização ou inserção adicional de registros possa ser refletida na tabela AGG executando este procedimento. Inclua parâmetros para o intervalo a ser atualizado. Se for diário, então você tem umDAILY AGG LOAD
eDAILY AGG RELOAD
procedimento. Incluir umAGG CHECK INTERVAL
eAGG CHECK DAILY
procedimento que o ajudará a dormir bem à noite. Ah, e sem mencionar umaAGG DATA HOLE CHECK
ou umaMISSING AGG DATA CHECK
e aplicar regras de negócios que implementam a verificação de uma quantidade mínima necessária de dados que você pode obter da tabela agregada ou da tabela principal ou tabela de preparo (de preferência)
-
Claro, nunca modifique oAGG
tabela. Sempre apenas recarregue-o.
-
Como isso ajuda? Você não precisaria apenas que seus relatórios consultassem oAGG
table, que é menor e mais rápida (já que a agregação já foi feita)? Talvez o problema de desempenho venha com o carregamento de intervalo, mas se você estruturar adequadamente sua tabela, seus índices e sua manutenção, deve valer a pena.
-
Onde entra o particionamento? Arquivamento. Depois de um certo tempo (discutir o que é aceitável com sua equipe/chefe/homem superior), você pode arquivar os dados antigos deMAIN
. Eu experimentei ter que manter 1 ano de dados no banco de dados de produção. Isso meio que parecia uma chatice, mas como era o pedido do cliente, a empresa não teve escolha a não ser me dar o espaço em disco que eu precisava (esfrega as mãos) e, cara, eu brinquei com isso até conseguir algo rodando decentemente. Devo mencionar que minha experiência foi com o Microsoft SQL Server 2005, e os procedimentos armazenados e o SSIS tornaram isso divertido.
Isso é tudo se você ainda não sabe, e para outros que podem querer considerar opções. Não estou dizendo que você já não conhecia nenhum dos itens acima; Estou apenas afirmando o que consegui fazer antes - considerando que não tinha mais informações para trabalhar em sua postagem, exceto que você tem um processo de consolidação que tentou.