[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