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

Renato Miranda renato.smiranda em gmail.com
Dom Dez 6 08:18:29 -03 2009


Sandro, tudo bem ?

Não seria mais simples, para evitar "buracos" na seqüência, em vez de
excluir o registro, apenas marcá-lo como inativo ?

-- 
Abraços,

RMiranda

2009/12/3 Sandro Souza <escovadordebits em gmail.com>

> 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
>>
>>
> ______________________________________________
> 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