Muitas vezes, no meu trabalho, surge a idéia de sincronização de dados bidirecional entre sistemas de banco de dados. O exemplo clássico é de dois sistemas de CRM ligeiramente diferentes (por exemplo, Raiser's Edge e Salesforce) e a necessidade de ter uma sincronização bidirecional de dados de contato entre eles.
Considerações sobre a API de lado, supondo que você tenha uma chave compartilhada para sincronizar e pensando puramente no algoritmo / padrão a ser empregado, essa é uma tarefa que geralmente é subestimada por não-técnicos.
Por exemplo, você precisa prestar atenção:
- Você pode detectar facilmente quais registros foram alterados nos dois sistemas (ou precisará comparar todos os registros entre os sistemas para detectar alterações)
- Se você estiver realizando uma sincronização uma vez a cada N horas, como lidar com conflitos em que o mesmo registro é alterado mais ou menos ao mesmo tempo nos dois sistemas
- Se você estiver fazendo uma sincronização em tempo real (ou seja, uma atualização em um sistema aciona imediatamente uma atualização no outro sistema), como lidar com divergências ao longo do tempo devido a bugs ou falhas no sistema
Pessoalmente, posso pensar em maneiras de resolver tudo isso, mas estou me perguntando se existem padrões, literatura ou práticas recomendadas bem conhecidas que eu poderia me referir.
Respostas:
Sim, um problema difícil, facilmente subestimado. E poderia dar muito trabalho. Se você usa as tecnologias da Microsoft, consulte o Microsoft Sync Framework aqui e aqui .
fonte
Existem muitas teorias sobre a sincronização de banco de dados do site remoto. Primeiro comece com INSERT. lidar com este é fácil - pois você pode criar um ID exclusivo para cada site (por exemplo, uma inicial do nome do site + ID (número): site_a_177 vs. site_b_53)
Portanto, a inserção não deve criar conflitos. o problema é a atualização. Não acredito que exista um método 100% à prova de falhas, mas você pode iniciar uma atualização "bloqueando" o registro no banco de dados remoto e somente depois de obter o identificador - continue com a atualização e termine sincronizando a atualização e só então solte a trava.
fonte