Sincronia offline / online banco de dados (sugestões, análises, etc.)

Estou em um projeto onde devo trabalhar com dois bancos um, central, sendo o servidor, e outro local onde o usuário poderá trabalhar e passar os dados para o banco central.

O central é SQL Server, enquanto a tecnologia para banco local estou pensando em HSQLDB. Porém não conheço bem a arquitetura SQL Server e o access, pois trabalhei muito com oracle, porém, se houver alguma forma de sincronização já exposta, solução da MS, acredito que poderia ser mais vantajoso.

Como estou pensando?

:arrow: Um usuário poderá selecionar os módulos que ele desejará executar em offline, dessa forma esses módulos serão baixados para o ambiente local (banco de dados local). E estará disponível para o usuário que poderá trabalhar de forma transparente.

:arrow: Ao baixar os módulos para trabalhar offline, apenas esses módulos baixados poderão ser utilizados, impossíbilitando o acesso (enquanto estiver offline) aos demais módulos que ele (o usuário) não baixou.

Dessa forma pensei que o banco local possa ser “renascido” a cada momento que for baixado para trabalhar offline. A questão que não sei, não tenho ainda idéia da quantidade de informações que podem ser baixadas, nem da escalabilidade do banco, e talvez essa forma seja arriscada ou inviável pela quantidade de informações a serem processadas até que o usuário possa chegar a usar no modo offline.

:arrow: Já que dois usuários podem baixar os mesmos módulos para serem trabalhados offline, eu pensei em um controle de versão interno, nas próprias tabelas, algum identificador ou tabelas que “façam” essa parte da identificação dos dados dos módulos, assim quando o usuário for exportar os dados para o banco central, ele saberá quem “commitou” e quem apenas fez consultas, etc. E caso haja conflito de versão (dois usuários do sistema baixaram um mesmo registro e alteraram, a versão de ambos eram a mesma, a versão esperada para o central deveria ser a anterior +1, assim que um comitou o outro não pode, já que a versão esperada é a anterior +1, e ele só poderia comitar se fosse asim).

Porém quero sugestões, se alguém implementou algo parecido, usou quais bancos, usou alguma API, escreveu uma lógica de versão interna, etc. Postem por favor os comentários.

:slight_smile:

A solução de sincronização sugerida pela Microsoft envolve usar SQL Server Compact Edition no seu aplicativo cliente, mas infelizmente acho que esse troço só funciona com aplicativos .NET. Dê uma olhadinha nisso se tiver um tempinho :stuck_out_tongue:

Opa thigol,

Realmente não sabia disso, mas estava pensando que a MS fizeste algo do tipo entre seus bancos.

Infelizmente ou não o banco central é SQL Server, disso eu não tenho controle, mas a respeito ao banco local eu deverei ainda definir, para isso tenho que ver o melhor atende aos aspectos:

:arrow: Comunidade ativa e banco estável
:arrow: Suporte ao hibernate (dicionário, documentação, etc.)
:arrow: Segurança local (criptografia, etc.)

Irei pesquisar a respeito do SQL Server Compact Edition e sua sincronia com o SQL Server.

A versão do Compact Edition suporta dois tipos de sincroniza:

:arrow: Replicação com merge
:arrow: Remote Data Access(RDA)

Darei uma olhada como ambas funcionam e se é fácil de implementar/usar essas tecnologias com Java.

E tudo que eu achar irei postar aqui.

O SQL Server Compact Edition já está descartado. Agora irei procurar um banco de dados que já tenha alguma solução implementada de sincronia de dados.

Só por curiosidade: por que você precisa dessa opção de trabalhar offline? Não seria mais barato investir numa conexão boa com o servidor central ao invés de configurar todo esse complexo esquema de sincronização?

Dê uma olhada nestes links, foram os que utilizei quando implementei “algo do tipo”.

http://www.microsoft.com/technet/prodtechnol/sql/70/maintain/sql7repl.mspx

Não, é mandatório, é necessário que seja assim. Até por que o sistema foi decidido em fazer usando Swing para permitir essa flexibilidade. O usuário pode ter a instalação na máquina local e uma em seu notebook, como os usuários não se encontram sempre em lugares fixos, conseqüentimente o sistema deverá rodar fora do ambiente local padrão, nesse caso ele nem acesso a internet terá, mas sim o sistema deverá estar lá, atualizado com a versão de alguns módulos que ele baixou, para trabalhar offline, e quando ele voltar de viajem, o sistema offline irá se conectar ao banco central e fazer o commit das transações.

[quote=aleck]Dê uma olhada nestes links, foram os que utilizei quando implementei “algo do tipo”.

http://www.microsoft.com/technet/prodtechnol/sql/70/maintain/sql7repl.mspx

[/quote]

Certo aleck, irie visualizá-los, obrigado.

Estou verificando o banco H2. Me pareceu interessante.

Alguém aqui já trabalhou com esse banco (principal de forma local) e o que achou dele (termos de performance, clustering, segurança, etc.)?

Estou precisando de uma solução similar. Como andam seus trabalhos?