[quote=grprado][quote=WalterIM]Outra opção, na verdade a mais clássica de todas, do tipo que se usava no cobol:
Faça um código sql específico, dando lock de verdade quando a primeira edição acontecer e verificando se o registro está em lock quando a segunda leitura para posterior edição for tentada.[/quote]
Eu estou fazendo assim também, mas porque me foi solicitado fazer assim.
Em um ambiente com alguma concorrencia vai dar pau. Ou você acha que usuários não saem para tomar cafézinho e largam o terminal idle no meio de um edit por 30 minutos?
[/quote]
Com certeza a melhor solução é a do lock otimista, mas dei essa sugestão porque o colega que começou a thread deu a entender que não poderia usar o lock otimista e teria que dar a mensagem antes do segundo usuário começar a editar.
louds, você provavelmente ainda não pegou um sistema com isso. E acredite, dói dar manutenção numa tralha dessas.
Travas otimistas++[/quote]
Concordo que optimistic locking é muito melhor nesse cenário. Mas se isso for um requisito do sistema, e fizer realmente sentido?
Sem utilizar uma tabela, uma boa forma de fazer isso seria usando memcached para guardar os locks e Comet style AJAX para garantir que não vamos ter locks mortos.
Opa, dai a coisa começa a ficar bem mais interessante. Mas acho que a primeira coisa a fazer é verificar qual tipo de lock é realmente necessário(se optimistic lock serviria nesse caso) ou se realmente, é requisito do sistema avisar o usuário já quando ele entrar no registro. Perder um tempinho avaliando isso pode te poupar dias de manutenção sofrida no futuro.
[quote=paulohbmetal]Pior que é… Imagina se a máquina do cara desliga ou cai a rede sei lá, no meio da edição do registro. O lock ficou no banco. E agora José?!
[/quote]
Antigamente este problema era resolvido facilmente logo na inicialização dos sistema verificando se havia locks travados. A gente guardava uma listinha em arquivo txt.
Na verdade todo este tópico é meio sem sentido. O que se quer fazer é pura perfumaria.
O modo mais normal de trabalhar com atualizações simultâneas é o modo otimista como muitos já escreveram:
Se abre o registro para edição de quantos estiverem a fim disto (que geralmente é raro ser mais de um)
O primeiro que tenta gravar consegue. Os demais são avisados de que o registro mudou e tchau. Em alguns casos recebem a tela com os novos valores no banco.
Em algumas aplicações se permite gravar também a alteração daquele que demorou mais tempo para salvar o registro com a possibilidade de fazer merge. Nunca vi isto mas sei que existe.
[quote=Luca]
Antigamente este problema era resolvido facilmente logo na inicialização dos sistema verificando se havia locks travados. A gente guardava uma listinha em arquivo txt.
[]s
Luca[/quote]
No cliente?! :shock: Quando falei da energia cair é no cliente… Bom, só se locar com o id do usuário que locou e logo na reinicialização o mesmo voltar avisando que existem “tarefas” pendentes sei lá…