MySQL Forums
Forum List  »  Portuguese

Fila de esepera, sincronização de dados, etc.
Posted by: Carlos Barreto Feitoza Filho
Date: June 08, 2009 07:48AM

Olá pessoal!

Tenho um sistema de sincronização de dados via FTP que envia a um servidor um arquivo de dados com instruções do que deve ser feito. No servidor este arquivo de dados é interpretado e é gerado um script SQL que insere, atualiza ou exclui os dados no servidor, exatamente como se o usuário remoto estivesse executando tais ações lá.

Em meu projeto inicial, atualmente em execução, cada sincronização é feita uma por vez, pois ao final da sincronização uma verificação é feita para comparar meu banco de dados com o banco de dados remoto. Ambos devem ter o mesmo conteúdo após a sincronização.

O problema é que após 5 anos de uso, os funcionários da empresa passaram a usar mais o sistema e por isso eles se irritam ao ver uma mensagem que diz: "o servidor está cheio, tente novamente em alguns instantes". Esta mensagem aparece porque propositalmente meu servidor FTP só aceita uma conexão por vez, pelo motivo explicado no parágrafo anterior.

As duas soluções propostas para este foram:
1. realizar as sincronizações simultaneamente;
2. implementar uma fila de espera de forma que os usuários não tivessem de "tentar novamente", ficando esta ação por conta do proprio programa de sincronização.

Vamos as perguntas:

Para a solução 1:
Sempre é o mesmo usuário (root) quem realiza as inserções no servidor. Se eu liberar para que todos façam sincronização ao mesmo tempo será como se no mesmo computador eu realizasse várias conexões como root. Neste caso há alguma forma de eu poder realizar a comparação de dados no final de forma que eu só "enxergue" o banco de dados no momento que eu me conectei? Em outras palavras, há alguma forma de eu não tomar conhecimento das ações de outros usuários conectados? Lembrando que a cada conexão com o servidor eu inicio uma transação, de forma que se os dados não forem iguais no final eu realizo um rollback retornando o servidor ao seu estado inicial (momento de minha conexão).

Para a solução 2:
Em testes muito preliminares que eu fiz, percebi que ao usar locks nas tabelas eu consigo uma forma serializada de realizar minhas ações. Será que ao me conectar se eu tentar dar lock em todas as tabelas envolvidas eu posso conseguir este comportamento, tipo, eu conecto e travo as tabelas para mim. Se elas tiverem destravadas o lock é meu e qualquer outro usuário que tentar dar lock ficará em espera até que eu libere ou desconecte.

Bom eu preciso de uma ajuda, uma idéia! Caso algum de vocês possa me ajudar mas não entendeu bem o que eu disse ou precisar de maiores informações, por favor, sinta-se a vontade de entrar em contato comigo via e-mail!

Muito obrigado!!

Delphi Developer



Edited 1 time(s). Last edit at 07/31/2009 05:48AM by Carlos Barreto Feitoza Filho.

Options: ReplyQuote


Subject
Views
Written By
Posted
Fila de esepera, sincronização de dados, etc.
5393
June 08, 2009 07:48AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.