[RESOLVIDO] Sincronização de banco de dados

Seguinte. Tenho um sistema que trabalha com um servidor central e várias unidades remotas. Essas unidades remotas monitoram de alguns equipamentos. Existem um banco central que tem as informações de todos os esquipamentos e unidades remotas no servidor. Esse banco pode ser de qualquer tipo (Oracle, MySQL, etc).

As unidades remotas devem ter autonomia para continuar à monitorar mesmo sem conexão com o Servidor Central. Normalmente eles obtem as medidas dos equipamentos, e mandam para o servidor central. Caso não haja conexão, elas armazenam localmente e quando a conexão voltam, atualizam o servidor central. Normalmente, guardam localmente somente a ultima medição.

Essas unidades remotas precisam ter uma autonomia, inclusive a adição ou remoção de equipamento no local (in site). Aí que entra o problema. Preciso manter os bancos dos equipamentos sincrnoizados. Atualmente, é feito assim:

Se eu adicionar um equipamento, chamo o web service central e aviso a central. Central coloca no banco. Em diversas oportunidades é feita a sincronia. O central me mandar todos os equipamentos cadastrados naquela unidade remota, eu apago o banco local, e insiro os registros que recebi.

Bom, eu queria fazer algo para sincronizar o banco. Para fazer um ‘merge’ das informações locais, com as informações do servidor durante esse processo de sincronização. Exemplo de aplicação disso: Minha conexão caiu, preciso adicionar um novo equipamento in site. Sem conexão, ele não adiciona, pois se adicionar, vai ser apagado quando for feita a sincronia.

Existe um jeito mais prático de fazer isso, ou vou precisar checar os registros de todos os quipamentos, ver quais existem localmente e dar update, ver quais não existem localmente e fazer insert, e ver quais existem localmente mas não na central e colocar isso como retorno do meu webService ?

Um último detalhe. O banco local é postgresql. O do servidor central, como dito, pode ser qualquer um (normalmente entre oracle, postgresql, mysql e sql server).

Essa situação é muito comun, porém é complicado quando se coloca “qualquer tipo de banco na central”.

Aqui, temos um sistema que possui algo semelhante, e o que foi feito foi um WS que recebe entidades novas, e alteradas (o cliente nunca exclui uma entidade). Na mão mesmo. A maioria dos bancos tem recurso de replicação, mas é claro que só entre bancos de mesma tecnologia, o que é uma covardia pois dificilmente a central usa o mesmo banco que os agentes ocasionalmente conectados.

Acho que já deveria existir um framework Java para isso, pois independeria de banco… mas ainda não tem.

Pelo visto vai ser na mão mesmo então, né ?