[firebase-br] Sincronização de base de dados remota
Marcos Weimer
marcosweimer em gmail.com
Seg Set 12 11:51:18 -03 2011
Bom, segue um "raciocionio"....
no lado do servidor principal
- Servidor de banco principal (esse vai o principal, como o nome ja diz, ele
vai receber e enviar os dados para os demais)
- Webservice - envio (este recebe a solicitação dos demais servidores, vai
no banco de dados, busca as informações necessárias (alteradas), transforma
tudo em um XML e retorna para quem solicitou)
- WebService - recebimento (este recebe os dados novos/alterados para serem
inseridos no banco principal, e consequentemente sendo disponibilizados para
os outros servidores)
- o webservice roda sobre um servidor web com suporte a
ASP.NET<http://asp.net/>(IIS vem no windows server / windows 7, basta
marcar nos componentes do
windows)
* IIS é um servidor web da microsoft
* É possivel rodar ASP.NET <http://asp.net/> em apache, desde que se tenha
paciencia e persistencia, com o IIS é facil, poucos clicks e esta tudo
rodando
no lado dos clientes
- programa rodando em paralelo com o seu sistema (um programa por banco
"filho", então uma filial com vários computadores só vai precisar rodar um
programa para sincronizar os dados, normalmente no servidor), este programa
não é complexo, apenas um timer e as SQLs para enviar/receber os dados, não
é dificil, apenas trabalhoso, depende de quantas tabelas o seu sistema
possui.
no banco de dados
- Criar em todas as tabelas que forem sincronizar uma campo timestamp que é
atualizado por trigger. (aqui usamos DATA_CRIACAO_ALTERACAO e é atualizado
por trigger a cada insert/update, este campo vai nos "dizer" se vamos
sincronizar ou não este registro com base na tabela de referencias
- Criar uma tabela de referencia, onde vai conter a filial, a data/hora da
ultima sincronização e a tabela (tanto no banco principal quanto nos
filhos), para enviar alguma informação vamos nesta tabela, lemos o ultimo
envio e selecionamos alterados/inseridos após a ultima sincronização, o nome
da tabela neste caso, é importante no caso de termos várias tabelas para
serem sincronizadas e a conexão cair, ai não temos o problema de pegar uma
tabela "grande" mais de uma vez.
no mais é trabalhar com transactions para evitar de duplicar registros,
ocorrer erros e ficar com "meia" sincronização salva.
Usamos algo parecido aqui para PDV que precisa trabalhar off-line (conforme
legislação atual) e para vendedores externos a empresa poderem fazer seus
pedidos, cadastrar novos clientes e afins.
É questão de dimensionar oque precisa ser sincronizado e se adequar.
Se for o banco todo, com muitas tabelas, vai ter uma trabalheira danada.
Uma questão importante tb é sempre verificar usuario/senha para
enviar/receber os dados, segurança nunca é "demenos", se seu sistema não
possuir este cadastro tb deverá ser implementado.
Não sei se fui claro, qq coisa vão perguntando ae.
flw
P.S. - estou reenviando sem a msg anterior e tal pq cai no limite de tamanho
da msg.
-=Ma®©oS=-
Marcos R. Weimer
Puma GTE 1974 Tubarão
Mais detalhes sobre a lista de discussão lista