Jump to content

Archived

This topic is now archived and is closed to further replies.

lucasaurelio100

Como sincronizar um DB Local(desktop) com um DB Web?

Recommended Posts

Olá a todos.

 

Estou desenvolvendo um sistema para controle de empréstimos e reservas de uma biblioteca. O sistema é composto por um sistema desktop: onde é feito os cadastros etc. E um sistema web: onde poderá ser consultado o acervo da biblioteca, bem como reservar livros(possuirá sistema de login obviamente).

 

O problema é que, não sei como sincronizar esses dois bancos. De modo que quando um livro seja reservado via web, o mesmo conste no sistema desktop como reservado etc. A Internet da biblioteca não é muito estável, portanto, se faz necessário que a sincronização ocorra no primeiro momento de conexão.

 

A parte desktop está sendo desenvolvida em Delphi, e a parte Web em PHP, ambos utilizam banco de dados SQL Server.

 

Grato.

Share this post


Link to post
Share on other sites

Pq nao colocar este banco em um provedor externo (cloud, se for o caso) e acessar o desktop por ele?

Share this post


Link to post
Share on other sites

Pq nao colocar este banco em um provedor externo (cloud, se for o caso) e acessar o desktop por ele?

Como disse: a internet da biblioteca é instável, logo não é possível ter o banco em nuvem. Se assim fosse, quando faltasse internet, não seria possível fazer nenhuma operação através do sistema local

Share this post


Link to post
Share on other sites

Como disse: a internet da biblioteca é instável, logo não é possível ter o banco em nuvem. Se assim fosse, quando faltasse internet, não seria possível fazer nenhuma operação através do sistema local

Existe alguns tipos de replicação, porém, o problema vai ser quando sua base ficar off-line e/ou durante a sincronização.

Sugiro que de uma lida neste item:

http://msdn.microsoft.com/pt-br/library/ms151198.aspx

 

[]´s

Share this post


Link to post
Share on other sites

lucasaurelio100,

 

Você pode utilizar a opção Linked Servers do SQL Server, deste modo, você poderá fazer a sincronização tranquilamente utilizando uma Stored Procedures ou trigger.

 

Com o Linked Servers (existe nativamente no Server), você conecta um banco no outro, o banco local com o banco existente no provedor. Faça testes para ver se tem a performance que vc precisa.

 

Utilizamos esta tecnologia para sincronizar o BD local com outro existente na LocaWeb.

 

Att.

Ségio

Share this post


Link to post
Share on other sites

lucasaurelio100,

 

Você pode utilizar a opção Linked Servers do SQL Server, deste modo, você poderá fazer a sincronização tranquilamente utilizando uma Stored Procedures ou trigger.

 

Com o Linked Servers (existe nativamente no Server), você conecta um banco no outro, o banco local com o banco existente no provedor. Faça testes para ver se tem a performance que vc precisa.

 

Utilizamos esta tecnologia para sincronizar o BD local com outro existente na LocaWeb.

 

Att.

Ségio

Segio,

discordo, pois imagina a volumetria de dados a serem trafegados pelo LinkdServer. Se é uma base teste ok, mas para uma base de produção não creio ser a melhor opção.

Em uma modelagem simples com 15 tabelas e um volume de dados em torno de 15mil/segundo o LinkdServer entre servidores na mesmo rede (retirando a latência de rede, interferência de placas, etc.) vai ser em torno de 1.2 segundos.

Cenário que utilizei para testes foram duas máquinas físicas com SQL2008R2 e SP1 instalado.

Em outro teste com as máquinas na nuvem (cloud) a perda de performance vai para 2 a 3 segundos por volume de 15mil registros.

Isso em uma modelagem simples, agora no cenário do lucasaurelio100 em que se trata de uma biblioteca, seja um pouco pior.

 

Quando você utiliza na Locaweb, fazem esta checagem em todas as tabelas no sistema ou somente por tabelas alteradas?

Fiz algo assim para sincronização e não prossegui com o projeto e mudamos para replicação e snapshot.

Share this post


Link to post
Share on other sites

A.Jr,

 

O Linked Servers é uma opção que deve, obviamente, ser testada. O lucasaurelio100 não foi claro quanto a quantidade de tabelas que precisam ser atualizadas, seja como for, convém testar esta tecnologia.

 

Sobre o nosso sistema, temos um sistema de cobrança cujos dados precisam ser sincronizado com o sistema que roda no site (Locaweb). Tem funcionado bem há uns 2 (dois) anos.

Devo mencionar que temos um link dedicado de 10 MB full.

 

Att.,

Sérgio

Share this post


Link to post
Share on other sites

A.Jr,

 

O Linked Servers é uma opção que deve, obviamente, ser testada. O lucasaurelio100 não foi claro quanto a quantidade de tabelas que precisam ser atualizadas, seja como for, convém testar esta tecnologia.

 

Sobre o nosso sistema, temos um sistema de cobrança cujos dados precisam ser sincronizado com o sistema que roda no site (Locaweb). Tem funcionado bem há uns 2 (dois) anos.

Devo mencionar que temos um link dedicado de 10 MB full.

 

Att.,

Sérgio

Com certeza deve ser testado e muito por sinal. Já tive problemas com LinkedServer, incluindo bases criptografadas, mas não é o caso deste post. Em um outro momento eu vou postar no meu blog a respeito.

Citei volumetria até mesmo pra ver se o usuário posta (se tiver) o volume de dados esperado.

E claro, o fato de ter um link dedicado facilita e muito o uso.

 

[]´s

Share this post


Link to post
Share on other sites

Eu crio sistemas que atendem esta demanda.

Chama -se CSV Comp Framework.

Minhas aplicações desktop podem compartilhar a base de aplicação web.

Os dados são armazenados no SGBD CSV Comp (Base no formato CSV).

As requisições do site são feitas nas tabelas do banco (Relacional).

A aplicação desktop acessa as mesmas tabelas compartilhando os mesmos Scripts (CQL).

Pensando nestes problemas foi que projetei meu framework.

Share this post


Link to post
Share on other sites

Almir, uma dúvida, como seria feita a sincronização entre os bancos locais e web?

Como no ambiente citado:

Biblioteca com banco local, a internet cai porem preciso sincronizar assim que a internet voltar?

 

[]´s

 

ps.: este post esta duplicado, a discussão esta neste post:

http://forum.imasters.com.br/topic/490416-como-sincronizar-um-db-localdesktop-com-um-db-web/

Share this post


Link to post
Share on other sites

No meu caso,se for usar uma base na núvem,logico que os dados que esta base possui,deve ser possivel serem acessados de qualquer cliente e poderia receber inclusão de qualquer cliente.Mas,não faria sentido que eu preencha uma tabela localmente para somente depois enviar para o servidor.O ideal seja uma base na núvem com tempo real de acesso entre todos os clientes.

Caso a conexão de um cliente caia,este cliente deve "pagar" por sua incapacidade de conexão (mantendo as regras de acesso normalmente).Quando o cliente "incapaz" se reconectar novamente no banco nas nuvens,os dados que estão no banco ja serão outros.Neste ínterin,o tal cliente perdeu "certas oportunidade" devido sua incapacidade de conexão.A regra do negocio continua.

Uma aplicação desktop pode cadastrar dados remotamente via webservice.

Os dados podem fluir em ambos os sentidos.

 

Para isso eu uso o CSV Comp Framework (para uma mesma base de dados)

 

Um SGBD em formato csv no servidor (usa-se script que são executados no servidor)

-(Para pesquisar,incluir,excluir,etc) via web,uso formulario web.

-(Para edição (crud)) via desktop,uso web services via metodo GET para escrita e download http para leitura.

 

Exemplo:(enquanto meu servidor estiver online,isto será possivel)

Cadastrar conversa

 

Resultado pode ser visto (aqui)

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.