AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 285378
Accepted
bboy
bboy
Asked: 2021-02-15 07:47:05 +0800 CST2021-02-15 07:47:05 +0800 CST 2021-02-15 07:47:05 +0800 CST

Prática recomendada para manipulação de tabela com grande quantidade de dados de transação

  • 772

Eu tenho uma tabela de transações armazenando grande quantidade de dados de transações. Apenas os dados mais recentes de um mês precisam estar disponíveis para uso transacional em tempo real. Dados menos recentes só podem ser usados ​​para geração de relatórios ou análise offline.

Qual é a melhor prática para lidar com esses dados de transação?

Devo criar uma tabela de histórico com as mesmas colunas e mover dados com idade superior a um mês da tabela de transações para a tabela de histórico com um trabalho em lote? Devo criar uma tabela de histórico por ano? Ou apenas usar uma única tabela de histórico para hospedar todos os dados anteriores?

Ou devo usar o particionamento de banco de dados em vez de tabelas de histórico?

Ou devo criar um data warehouse e mover os dados para ele?

database-design partitioning
  • 1 1 respostas
  • 495 Views

1 respostas

  • Voted
  1. Best Answer
    J.D.
    2021-02-16T05:23:00+08:002021-02-16T05:23:00+08:00

    Você deve especificar qual sistema de banco de dados e versão você está usando, pois isso afetará suas escolhas reais disponíveis para como você estrutura e gerencia os dados.

    Você mencionou que grande em seu contexto significa 100.000 novos registros por dia, então vamos planejar algo uma ordem de magnitude maior, 1 milhão de registros por dia. Em um mês são 30 milhões de novos registros, em um ano são ~360 milhões de registros. Embora 360 milhões de registros estejam começando a ficar um pouco pesados, não é de forma alguma algo incontrolável ou que precise de tratamento especial na maioria dos sistemas de banco de dados modernos.

    Vai depender das consultas reais que você está executando, a simultaneidade de seu servidor com gravações versus leituras e o tempo de execução aceitável para relatar os dados, mas 360 milhões de registros em um ano não devem assustá-lo com o RDBMS moderno . Eu gerenciei tabelas com 10 bilhões de registros nelas e relatei diretamente delas, geralmente consultando cerca de 1 milhão de registros por vez em menos de 10 segundos em hardware bastante modesto.

    Se você deseja reduzir a simultaneidade de relatórios, pode procurar arquivar os dados mais antigos (ou seja, qualquer coisa mais antiga que o último mês de dados) ou migrá-los para um data warehouse. Dependendo do tipo de consulta que está sendo feita e do sistema de banco de dados que você está usando, você pode ter recursos disponíveis como indexação columnstore e índices filtrados que podem ajudá-lo a melhorar os relatórios diretamente da própria tabela sem a necessidade de arquivar.

    Arquitetar corretamente seu esquema e indexar seus dados será o caminho mais longo para melhorar seus recursos de relatório.

    Finalmente, como Jonathan Fite mencionou, o particionamento não melhorará diretamente seu desempenho de consulta, mas pode ser usado para melhorar seu gerenciamento da tabela, pois você pode dividir seus dados de maneira inteligente em partições que permitem gerenciar os dados menos ativos enquanto os mais ativos partições estão em uso. Você verá melhorias na simultaneidade reduzida quando precisar fazer coisas como arquivar seus dados (por meio de troca de partição) ou manutenção de índice.


    Se sua estimativa de 100.000 linhas por dia estiver correta e você não prever nenhum crescimento significativo nos próximos anos na realidade, então você está olhando apenas para 36 milhões de linhas por ano. Eu nem pensaria em particionar ou arquivar nesse ponto. A indexação regular em um esquema bem arquitetado deve fornecer tempos de execução de consulta muito rápidos. Mas, pessoalmente, gosto de planejar uma magnitude maior de dados do que realmente espero, como acima.

    • 0

relate perguntas

  • Os índices filtrados podem ajudar a melhorar as consultas baseadas em uma hora inserida ou isso deve ser evitado?

  • Qual é a diferença entre os tipos de dados MySQL VARCHAR e TEXT?

  • É melhor armazenar os valores calculados ou recalculá-los a pedido? [duplicado]

  • Armazenar vs calcular valores agregados

  • Quais são algumas maneiras de implementar um relacionamento muitos-para-muitos em um data warehouse?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve