Sincronização de Banco de Dados
28/07/2018
0
Fala galera do AD,
Estou com um desafio para desenvolver e venho novamente solicitar a ajuda dos mestres aqui do forum.
Vamos ao problema:
Construi um web service em PHP e nele possuo 4 métodos:
putProduto;
getProduto;
deleteProduto;
postProduto;
Esses métodos estão trabalhando com um banco de dados MySQL e está na nuvem. Consigo realizar um CRUD completo com esses métodos.
Paralelamente possuo um sistema rodando localmente nas lojas com banco de dados firebird. Não posso deixar ligado direto ao banco na nuvem pois caso caia a internet a operação da loja não pode parar, por isso uso o banco local.
Minha ideia é utilizar o webservice como um meio de campo para sincronizar os bancos das lojas.
Pra isso estou desenvolvendo uma aplicação para rodar em uma thread separada que irá verificar quando houve alteração no banco local e irá replica-lá para o webservice, assim as outras lojas poderão atualizar os seus bancos locais.
Detalhe, por trás do webservice possuo um cliente WEB desenvolvido em AngularJS que também poderá atualizar as informações, para posterior atualização nas lojas.
Assim, quando a loja 1 atualizar o preço de um produto localmente, a aplicação local (quando houver internet) irá atualizar o preço no webservice e as outras lojas poderão se conectar para atualizar os preços.
O conceito é perfeito e irá resolver meu problema, que é manter as informações sincronizadas.
A questão é no ponto de definir como saber qual registro é o mais atual. Se o da aplicação local ou o do webservice.
Pensei primeiramente em criar um campo "data_alteracao" na tabela e toda vez que atualizar ou inserir um produto colocar a data e hora atual nesse campo e depois compara-lo com o banco local. Porém, essa solução fica muito vulneravel, pois caso o usuario altere a data e hora do sistema ou acabe a bateria da bios de alguma maquina cliente o sistema todo irá quebrar, pois as atualizações daquele cliente não seriam replicadas.
Ai vem minha pergunta, qual a melhor maneira de identificar qual banco está com a versão mais atualizada?
Toda ajuda ou sugestão será muito bem vinda.
Agradeço antecipadamente a todos que contribuírem.
Obrigado!
Estou com um desafio para desenvolver e venho novamente solicitar a ajuda dos mestres aqui do forum.
Vamos ao problema:
Construi um web service em PHP e nele possuo 4 métodos:
putProduto;
getProduto;
deleteProduto;
postProduto;
Esses métodos estão trabalhando com um banco de dados MySQL e está na nuvem. Consigo realizar um CRUD completo com esses métodos.
Paralelamente possuo um sistema rodando localmente nas lojas com banco de dados firebird. Não posso deixar ligado direto ao banco na nuvem pois caso caia a internet a operação da loja não pode parar, por isso uso o banco local.
Minha ideia é utilizar o webservice como um meio de campo para sincronizar os bancos das lojas.
Pra isso estou desenvolvendo uma aplicação para rodar em uma thread separada que irá verificar quando houve alteração no banco local e irá replica-lá para o webservice, assim as outras lojas poderão atualizar os seus bancos locais.
Detalhe, por trás do webservice possuo um cliente WEB desenvolvido em AngularJS que também poderá atualizar as informações, para posterior atualização nas lojas.
Assim, quando a loja 1 atualizar o preço de um produto localmente, a aplicação local (quando houver internet) irá atualizar o preço no webservice e as outras lojas poderão se conectar para atualizar os preços.
O conceito é perfeito e irá resolver meu problema, que é manter as informações sincronizadas.
A questão é no ponto de definir como saber qual registro é o mais atual. Se o da aplicação local ou o do webservice.
Pensei primeiramente em criar um campo "data_alteracao" na tabela e toda vez que atualizar ou inserir um produto colocar a data e hora atual nesse campo e depois compara-lo com o banco local. Porém, essa solução fica muito vulneravel, pois caso o usuario altere a data e hora do sistema ou acabe a bateria da bios de alguma maquina cliente o sistema todo irá quebrar, pois as atualizações daquele cliente não seriam replicadas.
Ai vem minha pergunta, qual a melhor maneira de identificar qual banco está com a versão mais atualizada?
Toda ajuda ou sugestão será muito bem vinda.
Agradeço antecipadamente a todos que contribuírem.
Obrigado!
Michel Silva
Curtir tópico
+ 0
Responder
Posts
31/07/2018
Carlos Augusto
Ola,
Bom ?
1.Pra isso estou desenvolvendo uma aplicação para rodar em uma thread separada que irá verificar quando houve alteração no banco local e irá replica-lá para o webservice, assim as outras lojas poderão atualizar os seus bancos locais.
--Uma aplicação em uma Thread separada ou uma nova aplicação ? Recomendo uma nova aplicação (tem diferença).
2. A questão é no ponto de definir como saber qual registro é o mais atual. Se o da aplicação local ou o do webservice.
--Eu faria deste modo.
--Passo 1. Sempre enviar os dados ao webservice que foram alterados.
--Passo 2. Validar no servidor, qual informação é a mais recente, de qual loja ou do servidor.
--Passo 3. Buscar o último preço do webservice e atualizar localmente.
3. Pensei primeiramente em criar um campo "data_alteracao" na tabela e toda vez que atualizar ou inserir um produto colocar a data e hora atual nesse campo e depois compara-lo com o banco local. Porém, essa solução fica muito vulneravel, pois caso o usuario altere a data e hora do sistema ou acabe a bateria da bios de alguma maquina cliente o sistema todo irá quebrar, pois as atualizações daquele cliente não seriam replicadas.
--Aqui não tem como, você pode ao instalar a nova versão do software guardar a data atual da instalação e sempre comparar com ela, caso seu cliente volte a data e hora você para o sistema e diz que ele deve estar com a Data/Hora atualizada.
Bom ?
1.Pra isso estou desenvolvendo uma aplicação para rodar em uma thread separada que irá verificar quando houve alteração no banco local e irá replica-lá para o webservice, assim as outras lojas poderão atualizar os seus bancos locais.
--Uma aplicação em uma Thread separada ou uma nova aplicação ? Recomendo uma nova aplicação (tem diferença).
2. A questão é no ponto de definir como saber qual registro é o mais atual. Se o da aplicação local ou o do webservice.
--Eu faria deste modo.
--Passo 1. Sempre enviar os dados ao webservice que foram alterados.
--Passo 2. Validar no servidor, qual informação é a mais recente, de qual loja ou do servidor.
--Passo 3. Buscar o último preço do webservice e atualizar localmente.
3. Pensei primeiramente em criar um campo "data_alteracao" na tabela e toda vez que atualizar ou inserir um produto colocar a data e hora atual nesse campo e depois compara-lo com o banco local. Porém, essa solução fica muito vulneravel, pois caso o usuario altere a data e hora do sistema ou acabe a bateria da bios de alguma maquina cliente o sistema todo irá quebrar, pois as atualizações daquele cliente não seriam replicadas.
--Aqui não tem como, você pode ao instalar a nova versão do software guardar a data atual da instalação e sempre comparar com ela, caso seu cliente volte a data e hora você para o sistema e diz que ele deve estar com a Data/Hora atualizada.
Responder
Clique aqui para fazer login e interagir na Comunidade :)