Pergunta
· jan 17

Problemas de integração e replicação de dados em base postgresql

Olá pessoal, tudo bem?

Estou enfrentando problemas na replicação de dados do meu Caché 2016 para um banco PostgreSQL. Preciso lidar com cerca de 300 atualizações de dados por minuto, e, sempre que determinadas tabelas sofrem alterações, essas mudanças precisam ser refletidas em outras bases de dados.

Até o momento, já tentei várias abordagens, como:

  • Configurar uma API intermediária,
  • Utilizar o Azure Service Bus,
  • Usar Jobs do Caché,
  • E todas elas têm como ponto de entrada as triggers das minhas tabelas.

Porém, em todos os casos, acabei encontrando gargalos de performance e travamentos no sistema. Estou ficando sem ideias de como prosseguir, pois as soluções que implementei não têm se mostrado estáveis. Alguém poderia me dar algum direcionamento ou compartilhar boas práticas para esse tipo de integração?

Agradeço antecipadamente a ajuda!

Product version: Caché 2016.1
$ZV: Cache for Windows (x86-64) 2016.2.1 (Build 803_1) Mon Feb 27 2017 09:47:46 EST
Discussão (2)2
Entre ou crie uma conta para continuar

Olá Gabriel,

Entendi que ao acionar a trigger o processo atualiza o banco externo. Talvez a carga de realizar as atualizações de maneira imediata esteja causando os problemas que você mencionou.

Uma possível abordagem é manter as triggers, mas não mais atualizar o banco externo, e sim gerar um log das atualizações a serem realizadas dentro do próprio Caché. E ter um processo apartado que faça as atualizações no banco externo a partir deste log.

Seria como se fosse uma fila, ou seja, as triggers colocam as informações no log de atualização, e o processo consome este log atualizando o banco externo.

Existe neste modelo a vantagem de a qualquer momento você poder reprocessar as atualizações, visto que os dados estarão no log. A desvantagem é um breve delay entre a execução no Caché e a replicação no PostGre, mas acredito por experiências passadas que este delay não será alto, pelo contrário, será bem baixo.

A inclusão dos dados no log não devem te gerar nenhum tipo de gargalo pois será uma estrutura do próprio Caché. E a atualização do banco externo será registro a registro, o que não deve gerar nenhum tipo de problema para sua infra pois terá um peso bem baixo de processamento.

Espero ter ajudado, e estou à sua disposição para conversarmos.

Um abraço!!

Boa tarde Julio, tudo bemm contigo?

Muito obrigado pela ajuda cara... Esse era realmente o gargalo, e a solução que encontramos foi algo um pouco parecido, enviar do caché para o serviço externo estava causando um gargalo, mas conseguimos colocar um serviço .NET para rodar no servidor do caché e via localhost o caché se comunica e faz o envio da informação e o .NET se responsabiliza pelo envio para um Azure service bus, utilizamos uma biblioteca do próprio .NET para envio do service bus... Isso possibilitou o envio ser praticamente em tempo real sem causar picos de processamento no servidor e assim solucionar o problema que eu tinha.

Muito obrigado pela ajuda e direcionamento,

Um abraço!!