O que deve ser considerado usando subseleções em consultas com bancos de dados carregados pesados?

StackOverflow https://stackoverflow.com/questions/520595

Pergunta

Estamos desenvolvendo um aplicativo com uma camada de persistência usando OpenJPA1.1 e um banco de dados Oracle como o armazenamento de back-end. Vou usar consultas com subselects (ver a minha pergunta em consulta JPA encontrando a última entrada na lista conectado ).

Agora, meus colegas de observação trabalho, que tais consultas podem levar a problemas de desempenho do banco de dados é preenchido com milhares de data do cliente usados ??por alguns milhares de usuários simultâneos (que será realidade em produção).

Então, minha pergunta é: existe um "melhor prática" usando subselects em consultas sob este circunstâncias? E o que deve ser considerado ao fazer isso?

Foi útil?

Solução

Gostaria em primeiro lugar provar que é um problema. Você vai querer carregar o banco de dados com dados fictício e ver como suas consultas funcionar como o banco de dados cresce. Caso contrário, você está gastando tempo otimizando algo que pode não ser um problema.

Uma coisa em que pensar. Em todos os lugares que eu trabalhei, onde as coisas desmoronar não é milhares de registros, mas milhões. Você tem este sistema, e ele funciona bem por um tempo e depois é só começa a desacelerar, mesmo quando você jogar mais hardware para ele. O lugar que eu estou trabalhando agora tem cerca de 70 milhões de discos no seu palmarés mesa que remonta a 1998. O desempenho em algumas consultas é horrível, como resultado e eles estão gastando muito tempo de trabalho em torno destas questões.

Mas em algum momento você realmente tem que perguntar. Será que precisamos para manter os dados mais de 4 anos de idade em nosso sistema transacional? Ou até 4 meses de idade? Este prazo depende da sua necessidade de negócios, mas se você manter o seu sistema transacional com apenas os dados que são necessários para processar trabalhos em curso ... e arquivar em um data warehouse seus registros históricos. Você vai melhorar o seu desempenho global, porque as chances são de que é apenas ocasionalmente você precisa consulta que dados antigos, então por que mantê-lo com seus dados recentes?

Se você pensar sobre essa frente, você vai salvar um monte de dores de cabeça a longo prazo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top