2012/5/31 Marco Aurélio V. da Silva <[email protected]>

>   Caros,
>
> Não lembro se esse assunto já foi discutido na lista, mas vamos lá. Estou
> desenvolvendo um sistema que terá vários cadastros com numeração sequencial
> gerada pelo sistema, mas preciso evitar ao máximo ter furos na sequência. O
> sistema é multiusuario, e há a possibilidade de vários usuários fazendo
> cadastro ao mesmo tempo.
> A lógica que desenvolvi é o seguinte, uma função (vb.net+npgsql) que pega
> uma determinada tabela e busca qual o maior codigo dela ai a função soma
> mais 1 e adiciona o novo registro, logo a função é composta por dois
> comandos um select para pegar o ultimo codigo, e um insert para inserir a
> nova numeração.
> Fazendo um stress teste na função com 3 usuários, só apos 115 tentativas
> dando enter ao mesmo tempo na tela conseguimos duplicar um número, mas
> fazendo um programa que faz um for de 1 a 200 da função rodando em tres
> maquinas ao mesmo tempo deu mais ou menos uns 30% de duplicidade.
> Adicionando um sleep de 0,1 segundo antes de cada select a duplicidade caiu
> para 15% mas ainda ocorreu.
>

Isso não vai dar certo dessa forma, desista. O que pode ser feito é gerar
um lock ao pegar o valor, e liberá-lo após inserir/atualizar os dados.

Você pode fazer isso usando o SELECT ... FOR UPDATE.


> Existe alguma possibilidade de melhorar isto sem usar sequence ? A
> sequence me gera o seguinte problema, o usuario entra na tela de cadastro e
> desiste, ai excluo este numero para reaproveitar se ninguem ja tiver
> incluido um numero maior.
> Posso fazer o controle de duplicidade tb, mas ai teria que ficar tratando
> a mensagem de erro.
> Tem alguma outra forma ?
>

Não basta gerar o valor da sequência apenas quando for realmente inserir o
registro, e não quando abre a tela?


Atenciosamente,
--
Matheus de Oliveira

Bacharelado em Ciências de Computação
Laboratório de Computação de Alto Desempenho -
LCAD<http://www.lcad.icmc.usp.br/>
Instituto de Ciências Matemáticas e de Computação -
ICMC<http://www.icmc.usp.br/>
Universidade de São Paulo - USP <http://www.sc.usp.br/>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a