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