Como você gerencia a sincronização bidirecional entre um servidor de banco de dados 'principal' e muitos servidores 'secundários', em particular a resolução de conflitos, assumindo que uma conexão nem sempre esteja disponível?
Por exemplo, eu tenho um aplicativo móvel que usa CoreData como o 'banco de dados' no iOS e gostaria de permitir que os usuários editem o conteúdo sem conexão com a Internet. Ao mesmo tempo, essas informações estão disponíveis em um site ao qual os dispositivos se conectarão. O que faço se / quando os dados nos dois servidores de banco de dados estiverem em conflito?
(Refiro-me ao CoreData como um servidor de banco de dados, embora saiba que é algo um pouco diferente.)
Existem estratégias gerais para lidar com esse tipo de problema? Estas são as opções em que consigo pensar:
1. Sempre use os dados do cliente como de maior prioridade
2. O mesmo para o servidor
3. Tente resolver conflitos marcando o carimbo de data e hora de edição de cada campo e fazendo a edição mais recente
Embora eu tenha certeza de que a terceira opção abrirá espaço para uma corrupção de dados devastadora.
Estou ciente de que o teorema da CAP diz respeito a isso, mas eu só quero consistência eventual, para que não descarte completamente, certo?
Pergunta relacionada: Padrões de melhores práticas para sincronização de dados bidirecional . A segunda resposta a esta pergunta diz que provavelmente não pode ser feito.