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.