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
