[RESOLVIDO] Result com serialização de objetos de tipos diferentes

6 respostas
R

Estou com problema que não sei como resolver… fico a espera de idéias =)

CONTEXTO:

Uma aplicação empresarial WEB rodando VRaptor.
Essa mesma aplicação pode ser rodada também em ambiente local.

Tenho um programa instalado na máquina do cliente que de x em x minutos fará uma solicitação à aplicação WEB para saber quais registros foram modificados. E esses registros devem ser sincronizados no banco que está no ambiente local.

PROBLEMA:

Se eu fizer uma solicitação ao servidor para cada tabela, provavelmente, terei um gargalo na rede. Pois, são mais de 60 tabelas.

Pensei em fazer uma solicitação só ao servidor e ele me retornaria um arquivo compactado (para diminuir o tráfego de dados na rede) com todos os registros, e esse programa que ficaria instalado no cliente saberia ler esse arquivo e sincronizar as informações.

Como poderia retornar isso usando um Result do VRaptor? Criar um objeto que contém uma lista de registros de cada classe?

Abraços,

6 Respostas

Lucas_Cavalcanti

se você gerar um arquivo, ou um inputStream, é só retornar no método

http://vraptor.caelum.com.br/documentacao/download-e-upload/

boneazul

RafaelViana:
Estou com problema que não sei como resolver… fico a espera de idéias =)

CONTEXTO:

Uma aplicação empresarial WEB rodando VRaptor.
Essa mesma aplicação pode ser rodada também em ambiente local.

Tenho um programa instalado na máquina do cliente que de x em x minutos fará uma solicitação à aplicação WEB para saber quais registros foram modificados. E esses registros devem ser sincronizados no banco que está no ambiente local.

PROBLEMA:

Se eu fizer uma solicitação ao servidor para cada tabela, provavelmente, terei um gargalo na rede. Pois, são mais de 60 tabelas.

Pensei em fazer uma solicitação só ao servidor e ele me retornaria um arquivo compactado (para diminuir o tráfego de dados na rede) com todos os registros, e esse programa que ficaria instalado no cliente saberia ler esse arquivo e sincronizar as informações.

Como poderia retornar isso usando um Result do VRaptor? Criar um objeto que contém uma lista de registros de cada classe?

Abraços,

Não é mais fácil voce faz replicação master/slave nos bancos pra sincronizar os dados em vez de tratar isso a nivel de aplicação ??

R

Procurei soluções nativas do banco, mas não me atenderam.

Pesquisei e testei: SQLYog Job Agent e Percona Toolkit. Mas, vi que ia ser mais fácil criar meu próprio controle. Principalmente na questão de resolução de conflitos.
Não testei master/slave

Mas, Pense no seguinte cenário:

*Uma aplicação no servidor online.
*Três (ou mais) vendedores saem para fazer vendas externas sem internet (cada um tem uma cópia do banco de dados atualizada no seu notebook).
*Ao mesmo tempo uma pessoa está digitando outras informações no online.
*Quando esses vendedores tiverem acesso à internet, eles enviam os dados que eles digitaram para o servidor.

Mas, e se ele cadastrou um cliente com o código 2, e no online outra pessoa já cadastrou esse código 2? E se o segundo vendedor também cadastrou um cliente (e como no banco local dele, não tinha informações do outro, também criou com o código 2)?

Como faço para resolver esse conflito usando master/slave?

boneazul

RafaelViana:
Procurei soluções nativas do banco, mas não me atenderam.

Pesquisei e testei: SQLYog Job Agent e Percona Toolkit. Mas, vi que ia ser mais fácil criar meu próprio controle. Principalmente na questão de resolução de conflitos.
Não testei master/slave

Mas, Pense no seguinte cenário:

*Uma aplicação no servidor online.
*Três (ou mais) vendedores saem para fazer vendas externas sem internet (cada um tem uma cópia do banco de dados atualizada no seu notebook).
*Ao mesmo tempo uma pessoa está digitando outras informações no online.
*Quando esses vendedores tiverem acesso à internet, eles enviam os dados que eles digitaram para o servidor.

Mas, e se ele cadastrou um cliente com o código 2, e no online outra pessoa já cadastrou esse código 2? E se o segundo vendedor também cadastrou um cliente (e como no banco local dele, não tinha informações do outro, também criou com o código 2)?

Como faço para resolver esse conflito usando master/slave?

Bom qual banco de dados voce utiliza primeiramente ? Pelo menos a maioria (mysql, oracle, postgres) ja tem solução nativa pra replicação em muitos métodos master/slave master/master (one-way two-way),

Pelo que entendi no seu caso nem seria master/slave seria master/master o que complica um pouco mais ja que todos os servidores (maquinas vendedor + servidor web) devem subir e baixar os dados e estarem sempre sincronizados certo ??

No seu caso pra evitar colisão de chave primaria basta deixar de trabalhar com incremental inteiros númericos e passar a gerar chaves únicas hashs com unique , então nunca haveria duas chaves iguais independente de quem inseriu e em qual maquina foi inserida.

Mas porque voce nao trabalha seus dispositiveis móveis (notes,palms,etc) com conexão 3g (super barato e veloz hoje em dia,alem de ter quase cobertura nacional) pra centralizar o servidor e aplicação e escalar seu servidor em vez de distribuir o software e banco ?? Inviável ??? Pois toda atualização de sistemas todos os vendedores teriam problemas , delay em conseguir nova versão e instalação. Já pensou nisso ???

R

Em primeiro lugar, utilizo MySQL e vou verificar essas soluções de replicações, mas o principal problema é a colisão da chave primária. Não posso usar hashes como chaves primárias (o sistema já está em produção e é inviável essa mudança no momento). Agora já estou com a solução de sincronização 90% pronta também…

Em relação a trabalhar com conexão 3G. O problema é que não é uma aplicação para minha empresa que eu posso decidir o que usar. Com certeza, simplificaria muito o processo.
É uma aplicação SAAS que desenvolvi, tenho centenas de clientes no Brasil. Muitos, já usam com 3G no notebook.
Mas já perdi mais de 20 clientes, que trabalham principalmente no INTERIOR DO NORTE E NORDESTE do Brasil. Não conheço a realidade da internet nesses estados, mas pelo que conversei com um dos meus clientes do Acre não da para confiar.

Já pensei em alguns problemas que podem ocorrer com o deploy da aplicação para os clientes. Semana que vem farei alguns protótipos para simular algumas situações.

Agradeço as suas ideias.

boneazul

RafaelViana:
Em primeiro lugar, utilizo MySQL e vou verificar essas soluções de replicações, mas o principal problema é a colisão da chave primária. Não posso usar hashes como chaves primárias (o sistema já está em produção e é inviável essa mudança no momento). Agora já estou com a solução de sincronização 90% pronta também…

Em relação a trabalhar com conexão 3G. O problema é que não é uma aplicação para minha empresa que eu posso decidir o que usar. Com certeza, simplificaria muito o processo.
É uma aplicação SAAS que desenvolvi, tenho centenas de clientes no Brasil. Muitos, já usam com 3G no notebook.
Mas já perdi mais de 20 clientes, que trabalham principalmente no INTERIOR DO NORTE E NORDESTE do Brasil. Não conheço a realidade da internet nesses estados, mas pelo que conversei com um dos meus clientes do Acre não da para confiar.

Já pensei em alguns problemas que podem ocorrer com o deploy da aplicação para os clientes. Semana que vem farei alguns protótipos para simular algumas situações.

Agradeço as suas ideias.

Hum entendi … tem que funcionar em modo híbrido mesmo ja que sai do seu controle o que o cliente vai usar … Bom já que ta 90% eu ainda ponderaria esses 10% que falta pra finalizar + testes + garantia de sincronização e consistencia de dados + todo tempo de vida do projeto e suas modificações contra replicação de dados a nivel de banco de dados . É um caso critico a se pensar acho , visando se preocupar o mínimo possível com isso.

http://www.neocodesoftware.com/replication/ um exemplo que achei , talvez ajude. Pelo que vi no mysql tem duas variaveis de replicação auto_increment_increment and auto_increment_offset pra evitar problema de colisão entre replicações master/master .

Outra pergunta seus clients são todos desktop ?? Ou é sistema web instalado localmente na maquina do cara rodando no browser ?? O problema maior que voce vai enfrentar acho é quando uma versao de software mudar consideralmente seu dominio de dados e voce tiver que replicar esse migration para os seus clientes executarem . Ex : tabelas deixarem de existir , ou novas foram criadas , trabalhar com alter table e drop column e migração de dados

Criado 21 de dezembro de 2011
Ultima resposta 24 de dez. de 2011
Respostas 6
Participantes 3