PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL para Data-Warehouse:Melhor abordagem para ETL/extração de dados quase em tempo real


Supondo que suas tabelas de interesse tenham (ou possam ser aumentadas com) uma chave sequencial, indexada e exclusiva, você obterá um valor muito melhor simplesmente emitindo SELECT ... FROM table ... WHERE key > :last_max_key com saída para um arquivo, onde last_max_key é o último valor de chave da última extração (0 se for a primeira extração.) Essa abordagem incremental e desacoplada evita introduzindo latência de gatilho no caminho de dados de inserção (seja gatilhos personalizados ou Slony modificado) e, dependendo da sua configuração, pode ser melhor dimensionado com o número de CPUs etc. (No entanto, se você também precisar rastrear UPDATE s , e a chave sequencial foi adicionada por você, então seu UPDATE instruções devem SET a coluna de chave para NULL então ele recebe um novo valor e é escolhido pela próxima extração. Você não poderá acompanhar DELETE s sem um gatilho.) É isso que você tinha em mente quando mencionou Talend?

Eu não usaria o recurso de registro, a menos que você não possa implementar a solução acima; o registro provavelmente envolve bloqueio de sobrecarga para garantir que as linhas de log sejam gravadas sequencialmente e não se sobreponham/substituam quando vários back-ends gravarem no log (verifique a fonte do Postgres.) A sobrecarga de bloqueio pode não ser catastrófica, mas você pode ficar sem ela se puder usar o incremental SELECT alternativo. Além disso, o registro de declarações abafaria qualquer mensagem de AVISO ou ERRO útil, e a análise em si não será instantânea .

A menos que você esteja disposto a analisar WALs (incluindo rastreamento de estado de transação e estar pronto para reescrever o código toda vez que atualizar o Postgres), eu não usaria necessariamente os WALs - isto é, a menos que você tenha o hardware extra disponível , caso em que você pode enviar WALs para outra máquina para extração (na segunda máquina você pode usar gatilhos descaradamente -- ou mesmo registro de declaração -- já que o que quer que aconteça não afeta INSERT /UPDATE /DELETE desempenho na máquina primária). para uma máquina diferente a partir da execução do SELECT incremental .