/ / É aconselhável ler um único conjunto de resultados de banco de dados com vários encadeamentos considerando o ganho de desempenho [fechado] - banco de dados, multithreading, desempenho, oracle

É aconselhável ler um único conjunto de resultados de banco de dados com vários segmentos considerando o ganho de desempenho [fechado] - banco de dados, multithreading, desempenho, oracle

Eu executo uma consulta em um banco de dados Oracle com Java usando uma única conexão. Seria mais rápido usar vários segmentos do que um para ler esse único conjunto de resultados?

Considere que eu implementarei a segurança de threads da operação de leitura.

Simplesmente gostaria de saber se há algum ganho de desempenho lendo de um único conjunto de resultados em uma única conexão com vários segmentos?

Respostas:

2 para resposta № 1

Existe alguma leitura de ganho de desempenho de um único conjunto de resultados em uma única conexão com vários segmentos?

Se todos esses tópicos estão fazendo está lendo, entãonão. Múltiplos encadeamentos podem até tornar mais lento, porque você terá que fazer algum tipo de sincronização para evitar leituras simultâneas. Assim, seus vários encadeamentos acabam executando sequencialmente. Você pode até achar que uma única conexão não pode ser acessada por nenhum outro segmento aquele que criou isso.

Agora, se você quiser ler de um banco de dados egravar em outro, é melhor usar algum tipo de relação produtor-consumidor. O produtor lê o banco de dados e coloca os dados em uma fila. O encadeamento do consumidor lê a partir da fila e grava no outro banco de dados.

Então o produtor faz isso:

while not end of data
read record
put record on input queue
end-while
mark end of queue

O consumidor:

while not end of queue
remove item from input queue
write record to database
end-while

Com essa configuração, você obtém um muito grandeganho de desempenho porque os encadeamentos operam independentemente um do outro, exceto para aquela fila compartilhada que normalmente é uma estrutura de dados que é otimizada para acesso simultâneo dessa maneira. O .NET, por exemplo, tem o BlockingCollection por esta. Outros ambientes provavelmente têm algo bastante semelhante.