[RESOLVIDO] Sincronização de banco de dados

2 respostas
rock-skull

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).

2 Respostas

xdraculax

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.

rock-skull

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

Criado 29 de agosto de 2011
Ultima resposta 29 de ago. de 2011
Respostas 2
Participantes 2