[firebase-br] Aos interessados: Omelhor Autoincrementosequencial

Caio Oliveira news em caiosistemas.com.br
Qui Abr 6 12:42:59 -03 2006


É verdade Eduardo, eu também fiquei curioso, pois não usei os GENERATORS 
justamente por causa disso.

Sds,

Eduardo Jedliczka (TeamFB) escreveu:
> hehehe... só por curiosidade, nos seus testes, alguém desistiu, cancelou ou 
> deu rollback nos valores gerados ???
> 
> Pensa comigo, na vida real, as coisas "não são" exatamente como nós 
> imaginamos... muita coisa acontece entre um "post" dentro de bloco 
> try...except e um hard-commit no banco de dados....
> 
> Não quero dizer que GENERATORS não prestam (longe de mim tal afirmação), 
> pois eles são a forma mais eficiente de "construir" uma chave única, só que 
> eles PODEM NÃO SER CONFIÁVEIS para seqüências ininterruptas... 
> (principalmente quando o usuário PRECISA saber qual o número gerado para 
> "conferir".
> 
> [s]
> 
> 
> ======================
> Eduardo Jedliczka
> Membro do TeamFB - FireBase
> Apucarana - PR
> ======================
> 
> ----- Original Message ----- 
> From: "Anticlei Scheid" <cleischeid em yahoo.com.br>
> To: "FireBase" <lista em firebase.com.br>
> Sent: Thursday, April 06, 2006 12:06 PM
> Subject: Re: [firebase-br] Aos interessados: Omelhor 
> Autoincrementosequencial
> 
> 
> Existe sim !!!
> 
>     Sempre utilizei os GENERATORS para chaves sequenciais e nunca tive
> problemas, mas "fiquei com a pulga atrás da orelha" e decidi fazer um teste.
>     Fiz um teste com uma aplicação gerando identificador sequencial
> utilizando o GENERATOR no FB 1.5 com código protegido por blocos try..except
> e try..finally e com o controle da transação. A aplicação gera registros em
> intervalos configuráveis (em milisegundos) utilizando um GENERATOR para a
> chave sequencial.
>     Rodei 12 instâncias da aplicação ao mesmo tempo e configurei intervalos
> variados para cada instância entre 500 e 600 milisegundos para que
> ocorressem conflitos.
>     Resultado: foram 4321 registros em aproximadamente 8 minutos sem nenhum
> conflito de chave, ou seja, funcionou perfeitamente e com segurança.
>     Obs: fiz um teste idêntico utilizando o MAX e é lógico que não deu
> certo. Somente duas instâncias e já deu conflito conforme já tinha falado
> antes.
>     Se quiserem os fontes do teste para avaliar basta me pedir.
>     E é lógico que se houver alguma falha que invalide meu teste, por favor
> gostaria de ser o primeiro a saber.
> 
> Abraço a todos.
> 
> ----- Original Message ----- 
> From: "Eduardo Jedliczka (TeamFB)" <jedyfb em gmail.com>
> To: "FireBase" <lista em firebase.com.br>
> Sent: Thursday, April 06, 2006 11:11 AM
> Subject: Re: [firebase-br] Aos interessados: Omelhor
> Autoincrementosequencial
> 
> 
> Bom, deixa eu por lenha da fogueira...
> 
> NÃO EXISTE SOLUÇÃO MÁGICA PARA NÚMEROS ININTERRUPTOS SEQUENCIAIS EM BANCO DE
> DADOS RELACIONAIS.
> 
> Se você precisa se preocupar em "Sequencias Reais" em Notas Fiscais,
> Cheques, e outros documentos deste porte, não adianda usar um
> Sequence/Generator (nem no Oracle!!!), e tem que se ter muito sangue frio
> para se utilizar "Select Max" em aplicações com mais que meia-dúzia de
> operadores simultâneos.
> 
> Há paliativos "universais" para se resolver isto, entre eles uma "tabela de
> gabarito" contendo (dependendo do caso) os "furos" e códigos ainda não
> utilizados na emissão de documentos. Só vale lembrar, que para isto
> funcionar, é necessário que esta tabela esteja numa transação "diferente"
> (auto-commit, read-commited, with lock), onde só será consultada e alterada,
> após o Commit da transação principal.
> 
> Também há soluções "exclusivas" do InterBase/FireBird... pode-se utilizar
> "eventos" para capturar qual foi o último número de nota/cheque emitido e
> assim criar uma sequencia sem falhas.
> 
> (Cantu que tal acrescentar este assunto na temática das palestras do 3º FDD
> ???)
> 
>  ======================
> Eduardo Jedliczka
> Membro do TeamFB - FireBase
> Apucarana - PR
> ======================
> 
> ----- Original Message ----- 
> From: "Andrei Luís" <compuvale.software em gmail.com>
> To: "FireBase" <lista em firebase.com.br>
> Sent: Thursday, April 06, 2006 9:17 AM
> Subject: Re: [firebase-br] Aos interessados: Omelhor
> Autoincrementosequencial
> 
> 
> Uma solução que se usava bastante na época do Clipper, era de uma tabela a
> parte para guardar a sequência. Ex.:
> 
> Tabela     Campo   Sequencia
> Clientes    ID            1
> Produtos  ID            4
> Pedidos   ID             10
> ...
> 
> Acho que saiu na Clube Delphi ou na SQL Magazine uns meses atras uma solução
> parecida com essa, o título era algo como: "Campos auto-incremento para
> qualquer BD". O colunista usou Firebird para mostrar os exemplos.
> 
> []
> Andrei
> 
> 
> Em 06/04/06, Luis Asensio - Control/P Sistemas <luis em controlp.com.br>
> escreveu:
>> Boa dia a todos!!!
>>
>>        Essa semana fiz um teste comparando a eficiencia do auto-incremento
>> das duas formas descritas. Uma realizando um MAX na tabela e outra usando
>> a
>> Generator. O teste foi bem simples: Rodei uma aplicatico no qual me inflou
>> uma determinada tabela em 100.000 e inserir um cronometro interno para
>> poder
>> comparar o tempo. O resultado foi uma diferença de 3:00 min, a mais para o
>> Trigger com o MAX. O Generator com muitos registros é mais rápido acima de
>> 20.000 registros. Concordo que para um sequencial integro o MAX minimiza o
>> problema.
>>
>>
>> Abraços
>>
>>
>> Luis Asensio
>> Control/P Sistemas
>> Setor de Desenvolvimento
>> luis em controlp.com.br
>> http://www.controlp.com.br
>>
>> -----Original Message-----
>> From: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br]
>> On Behalf Of Listas - VirtualComp
>> Sent: quarta-feira, 5 de abril de 2006 18:12
>> To: Carlos H. Cantu; FireBase
>> Subject: Re: [firebase-br] Aos interessados: Omelhor
>> Autoincrementosequencial
>>
>> CREATE TRIGGER GER_COD_CLIENTES FOR CLIENTES ACTIVE BEFORE INSERT POSITION
>> 0
>> AS declare variable cod integer; begin  select max(codigo_cli)  from
>> clientes  where clientes.empresa_cli = new.empresa_cli  into :cod;  if
>> (cod
>> is null) then
>>     cod = 0;
>> new.codigo_cli = cod + 1;
>> end
>>
>>
>> com essa trigger eu tenho 3..4 empresas cadastradas cada empresa tem uma
>> sequencia clientes e nunca da problema...
>>
>>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 
> 





Mais detalhes sobre a lista de discussão lista