Ce qui devrait être envisagé d'utiliser des sous-requêtes dans sélectionne avec des bases de données chargées lourdes?

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

Question

Nous développons une application d'une couche de persistance à l'aide OpenJPA1.1 et un DB Oracle comme stockage arrière. Je vais utiliser des requêtes avec des sous-requêtes (voir ma question Solving requête JPA trouver la dernière entrée dans la liste des connectés ).

Maintenant, mes collègues de travail, remarque que ces requêtes peuvent conduire à des problèmes de performance que la base de données est rempli de milliers de date de clients utilisés par quelques milliers utilisateurs simultanés (qui sera la réalité de la production).

Alors, ma question est la suivante: est-il un "meilleures pratiques" dans les requêtes en utilisant subselects sous cette situation? Et ce qui doit être pris en considération en faisant cela?

Était-ce utile?

La solution

Je voudrais tout d'abord prouver qu'il est un problème. Vous aurez envie de charger la mise de base de données avec des données fictives et voir comment vos requêtes fonctionnent comme la base de données grossit. Sinon, vous passez du temps en optimisant quelque chose qui ne peut pas être un problème.

Une chose à penser. Dans tous les endroits où j'ai travaillé, où les choses tombent en morceaux ne sont pas des milliers de dossiers, mais des millions. Vous avez ce système, et il fonctionne très bien pendant un certain temps, puis tout commence à ralentir même que vous jetez plus de matériel à elle. L'endroit que je travaille a maintenant environ 70 millions de disques dans sa table historique datant de 1998. Performance sur certaines requêtes est horrible en conséquence et ils dépensent beaucoup de temps de travail autour de ces questions.

Mais à un moment donné, vous avez vraiment demander. Avons-nous besoin de conserver les données de plus de 4 ans dans notre système transactionnel? Ou encore 4 mois? Cette limite de temps dépend de vos besoins d'affaires, mais si vous gardez votre système transactionnel avec uniquement les données nécessaires à l'exécution des travaux en cours ... et archive dans un entrepôt de données de vos documents historiques. Vous allez améliorer votre performance globale, parce que les chances sont qu'il est seulement de temps en temps vous devez interroger que les anciennes données, alors pourquoi garder vos données récentes?

Si vous pensez à ce front, vous gagnerez beaucoup de maux de tête à long terme.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top