Sincronização de dados, para trabalhar OFFLINE (caso necessário)

Semana passada estive testando o Hibernate Envers e fiquei impressionado com a facilidade da configuração e o potencial que ele possui no controle das revisões dos registros.

A partir daí, voltei ao meu questionamento que tenho há quase meio ano em busca de uma boa alternativa para trabalhar com um sistema online, que caso caia o sinal da internet o usuário possa continuar usando o sistema normalmente em um banco de dados local.E depois quando a internet voltar ele continua no mesmo processo.Ou seja, essa queda passar imperceptível na visão do usuário.

Hoje em dia, esse processo é bastante trabalhoso se é que tem como fazer, pois vejo diversas limitações.

1-Para usar o sistema “offline” eu preciso ter uma base de dados atualizada localmente, e o usuário (nem o computador) irá prever uma queda na internet e fazer um backup segundos antes da queda.

Por isso, que voltei nessa questão com o “milagre” que o Envers propicia. O Envers grava as revisões em uma nova tabela do banco de dados a cada alteração.Penso eu, não seria fantástico ter algum framework que utilizasse esse mesmo conceito, ao passar o endereço local dele, toda alteração que fizesse no banco de dados do servidor também atualizasse nesse banco de dados local? Não haveria perda de perfomance, pois a aplicação cliente chamaria o servidor, e enquanto está esperando a resposta do servidor já chamou a atualização no banco de dados local.O processamento ocorreria em locais diferentes.

Com um banco de dados local atualizado, assim que a internet caísse ( tem algumas API’s que já disponibilizam isso ) dispara um evento e você falaria para o seu programa utilizar o banco de dados local, e assim que a internet voltasse você sincronizaria as novas informações, e as que foram alteradas (que estariam marcadas com alguma flag).Assim o seu cliente não fica reclamando que o servidor está fora do ar, ou que está sem internet, e com certeza ganharíamos muitos pontos com os clientes.

O problema em trabalhar com o banco de dados local é que já entraria outra limitação, já que provavelmente todos os bancos de dados embarcados possuam uma estrutura mais limitada e, talvez não consiga simular toda a estrutura de um banco de dados como o MySQL, PostgreSQL ou Oracle.Porém como estamos falando apenas em inserir registros talvez possa ser feito algo.
Enfim, é uma solução talvez complexa, mas que se bem trabalhada pode originar um bom framework… Porém, acho que já devem existir opções que satisfaçam o que preciso se alguém souber por favor me indique link ou documentação :smiley:

OBS: Hoje em dia estamos cada vez mais dependentes da internet, porém não podemos ficar presos a ela.Precisamos oferecer alternativas que possam suprir uma eventual falta dela.

[quote=RafaelViana]Semana passada estive testando o Hibernate Envers e fiquei impressionado com a facilidade da configuração e o potencial que ele possui no controle das revisões dos registros.

A partir daí, voltei ao meu questionamento que tenho há quase meio ano em busca de uma boa alternativa para trabalhar com um sistema online, que caso caia o sinal da internet o usuário possa continuar usando o sistema normalmente em um banco de dados local.E depois quando a internet voltar ele continua no mesmo processo.Ou seja, essa queda passar imperceptível na visão do usuário.

Hoje em dia, esse processo é bastante trabalhoso se é que tem como fazer, pois vejo diversas limitações.

1-Para usar o sistema “offline” eu preciso ter uma base de dados atualizada localmente, e o usuário (nem o computador) irá prever uma queda na internet e fazer um backup segundos antes da queda.

Por isso, que voltei nessa questão com o “milagre” que o Envers propicia. O Envers grava as revisões em uma nova tabela do banco de dados a cada alteração.Penso eu, não seria fantástico ter algum framework que utilizasse esse mesmo conceito, ao passar o endereço local dele, toda alteração que fizesse no banco de dados do servidor também atualizasse nesse banco de dados local? Não haveria perda de perfomance, pois a aplicação cliente chamaria o servidor, e enquanto está esperando a resposta do servidor já chamou a atualização no banco de dados local.O processamento ocorreria em locais diferentes.

Com um banco de dados local atualizado, assim que a internet caísse ( tem algumas API’s que já disponibilizam isso ) dispara um evento e você falaria para o seu programa utilizar o banco de dados local, e assim que a internet voltasse você sincronizaria as novas informações, e as que foram alteradas (que estariam marcadas com alguma flag).Assim o seu cliente não fica reclamando que o servidor está fora do ar, ou que está sem internet, e com certeza ganharíamos muitos pontos com os clientes.

O problema em trabalhar com o banco de dados local é que já entraria outra limitação, já que provavelmente todos os bancos de dados embarcados possuam uma estrutura mais limitada e, talvez não consiga simular toda a estrutura de um banco de dados como o MySQL, PostgreSQL ou Oracle.Porém como estamos falando apenas em inserir registros talvez possa ser feito algo.
Enfim, é uma solução talvez complexa, mas que se bem trabalhada pode originar um bom framework… Porém, acho que já devem existir opções que satisfaçam o que preciso se alguém souber por favor me indique link ou documentação :smiley:

OBS: Hoje em dia estamos cada vez mais dependentes da internet, porém não podemos ficar presos a ela.Precisamos oferecer alternativas que possam suprir uma eventual falta dela.
[/quote]

Esse é um problema clássico …eu sempre sofri com esse tipo de coisa…ja que um sistema web tem suas limitações principalmente em aplicações que não podem ficar offline de jeito nenhum…exemplo um frente de caixa…
a melhor solução q eu acho é instalação da aplicação e de um banco de dados no cliente e uma online e os bancos se olhando em replicação master-master…ou seja nao ha dependencia de internet pra funcionar e o sistema tem o ponto web pra acessar de qualquer ponto…é dificil pensar em algo nesse sentido …ja quebrei a cabeça pra simplificar isso deixando a aplicação num unico ponto…parece q o gears do google faz algo do tipo …que é o caso do gmail…mas nao sei realmente como ele funcionar…