Threads e Banco de dados

1 resposta
L

Boas pessoal

tenho aplicação em java que roda um processo que gera 10 threads para fazer o mesmo trabalho, e todas elas manipulam os dados da mesma tabela no banco.
Gostaria de saber como faço para que quando eles estiverem a fazer o query não trabalhem com o dados que outra thread esteja trabalhando, ou seja quero que quando um thread selecione um bloque de registos não permita que as outras mexam nelas.

Basicamente os threads tem a funcao de selecionar e actualizar os registos, e eu coloquei varias threads porque por vezes são muitos registos (cerca de 10,000) e preciso que vários processos acelerem o trabalho. seria algo como select for update ? mas pelo que vi este vai permitir que as outras threads possam selecionar os mesmos registos que outras threads estão trabalhando… será que resulta ? preciso de uma dica

Banco de dados : DB2

1 Resposta

guilherme_costa1

Bom dia,

Não achei um volume alto para querer fazer o trabalho em paralelo, já pensou em fazer um update direto, sem ficar carregando os dados na sua aplicação? Outra questão é que tipo de atualização está querendo fazer?

Sobre a questão de impedir que uma Thread atualize a mesma linha da outra, você pode usar um nível de isolamento que prenda a LINHA que está sendo lida/atualizada.

Segue os níveis que podes usar:

O DB2 fornece diferentes níveis de proteção para isolar os dados:

  • Uncommitted Read (UR, Leitura sem alocação)
  • Cursor Stability (CS, Estabilidade do cursor)
  • Read Stability (RS, Estabilidade da leitura)
  • Repeatable Read (RR, Leitura reproduzível)

Com o nível de isolamento Cursor stability (Estabilidade do cursor), você terá o seguinte comportamento do DB2:

  • A estabilidade do cursor é o nível de isolamento padrão. Ela fornece um grau de bloqueio mínimo. Basicamente com este nível de isolamento, a linha ?atual? de um cursor é bloqueada. Se a linha for somente para leitura, o bloqueio é mantido até ser acessada uma nova linha ou a unidade de trabalho ser encerrada. Se a linha for atualizada, o bloqueio é mantido até a unidade de trabalho ser encerrada.
Criado 30 de março de 2014
Ultima resposta 31 de mar. de 2014
Respostas 1
Participantes 2