[firebase-br] Otimização de Transação

Sandro Souza escovadordebits em gmail.com
Qui Dez 3 02:15:29 -03 2009


Bom dia/tarde Josauro.

No meu caso, faço tudo dentro de uma única transação, mas como você 
mesmo citou, o problema de dois ou mais usuários tentarem utilizar o 
mesmo código devido à concorrência existe realmente. A única vantagem, 
no meu caso, é não necessitar de uma tabela de códigos reaproveitáveis, 
mas no restante, não foge dos problemas que você já está passando.

Como já foi citado várias vezes em outros posts, o uso de 
geradores/sequences poderia realmente resolver essa questão de 
concorrência, mas por outro lado, fugiria a reutilização de códigos como 
é o nosso caso.

Uma outra abordagem poderia ser a seguinte:

1 - Todas as chaves estrangeiras seriam criadas utilizando a opção "ON 
UPDATE CASCADE".

2 - Utilizaríamos geradores/sequences, e dessa forma, nas inclusões não 
reutilizaríamos mais os códigos excluídos, ganhando performance e nos 
livrando de problemas de concorrência no que se refere ao uso do mesmo 
código.

3 - Criaríamos uma stored procedure que seria acionada sempre que 
desejássemos encontrar essas "brechas" de código em cada uma das tabelas 
dos nossos bancos, e encontrando-as, executaria UPDATEs nesses campos 
chaves para efetuar as "correções" e rearrumar os códigos para deixar 
tudo sequencial e sem essas "brechas". Como as chaves estrangeiras 
teriam sido criadas com a opção "ON UPDATE CASCADE" (item 1), esses 
mesmos códigos nas tabelas filhas/detalhes seriam automaticamente 
alinhados/ajustados pelo próprio banco. Para caad tabela que sofreu 
ajustes de código, seu respectivo gerador/sequence também seria reajustado.

Dessa forma, eu acredito que teriamos uma forma melhor de conseguir o 
que pretendemos.

Sei que o fato de deixar essas "brechas" de código não tem realmente 
qualquer impacto negativo no sistema, que viveria tranquilamente com 
isso, e que essa necessidade de manter todos os códigos em ordem 
sequencial e sem "brechas" é apenas questão de gosto pessoal, 
"perfumaria" ou simplesmente ter a sensação de que tudo está organizado 
no banco, e que só haveria necessidade real disso se por acaso 
tivéssemos tabelas com tantos registros que poderia acontecer de esgotar 
os valores disponíveis para os campos chaves.

No meu caso específico, assumo que se trata apenas de gosto pessoal mesmo.

Josauro, o que você acha dessa nova abordagem?

Espero ter ajudado mais que atrapalhado. :D

Josauro S.J. escreveu:
> Obrigado Souza por responder
> Interessante a sua idéia, eu armazeno os codigo quando excluidos em 
> uma tabela, e reutilizo os na ordem que foram excluidos, ate ai tudo 
> bem, o problema é ter que startar e comitar uma transação independente 
> so para essa tabela, a fim de que outros processos usem os valores da 
> tabela corretos, mas isso tem um preço, a performan-se em grande 
> volume de inclusões, fica muito lento, não o reaproveitamento de 
> codigo, mas o processo de iniciar e fechar uma transação especifica.O 
> mesmo deve ocorrer com o seu metodo, se dois estiverem acessando ao 
> mesmo tempo, poderão encontrar o buraco e tentar usar.
>
> O que procuro é uma forma de otimizar esse processo de transação 
> independente, se deixar na transação corrente, fica rapidissimo, porem 
> ai existe o problema de concorrencia, dois processo pegarem o mesmo 
> valor, antes de commitar.
>
> Abraços
> Josauro S.J
>
>
>>
>> Em nosssos sistemas adotamos o uso de um arquivo mestre para prover o
>> sequencial para as chaves primarias de todas as tabelas, assim faremos o
>> reaproveitamento de codigos excluidos ou não usados.
>> O problema é que para consistencia, precisa-se abrir uma transação
>> especifica para pegar e atualizar o sequencia para na tabela mestre para
>> cada registro que se for incluir nas tabelas do sistema, e esse 
>> processo se
>> torna estremamente lento em inclusões em massa, onde se gere um grande
>> número de inclusões em outas tabelas.Com o uso do Generation o 
>> processo é
>> extremamente rapido.
>> Alguem utiliza esse processo, e achou uma solução para tornar esse 
>> processo
>> mais rapido ?
>>
>> Obrigado.
>> Josauro S.J.
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: 
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>




Mais detalhes sobre a lista de discussão lista