Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Arquitetura de banco de dados para milhões de novas linhas por dia


Se você estiver falando de volumes maiores de dados, veja Particionamento MySQL . Para essas tabelas, uma partição por data/hora certamente ajudaria no desempenho. Há um artigo decente sobre particionamento aqui .

Veja como criar dois bancos de dados separados:um para todos os dados brutos para as gravações com indexação mínima; um segundo para relatar usando os valores agregados; com um processo em lote para atualizar o banco de dados de relatórios do banco de dados de dados brutos ou use a replicação para fazer isso por você.

EDITAR

Se você quiser ser realmente inteligente com seus relatórios de agregação, crie um conjunto de tabelas de agregação ("hoje", "semana até a data", "mês até a data", "por ano"). Agregar desde dados brutos até "hoje" diariamente ou em "tempo real"; agregar de "por dia" a "semana até hoje" todas as noites; de "week to date" a "month to date" semanalmente etc. Ao executar consultas, junte (UNION) as tabelas apropriadas para os intervalos de datas em que você está interessado.

EDIÇÃO #2

Em vez de uma tabela por cliente, trabalhamos com um esquema de banco de dados por cliente. Dependendo do tamanho do cliente, podemos ter vários esquemas em uma única instância de banco de dados ou uma instância de banco de dados dedicada por cliente. Usamos esquemas separados para coleta de dados brutos e para agregação/relatórios para cada cliente. Executamos vários servidores de banco de dados, restringindo cada servidor a uma única instância de banco de dados. Para resiliência, os bancos de dados são replicados em vários servidores e com balanceamento de carga para melhor desempenho.