J'essaie de comprendre si c'est efficace pour moi de mettre en cache toutes mes déclarations lorsque je crée ma connexion de base de données ou si je ne devrais créer que celles qui sont utilisées les plus utilisées et créent les autres si elles sont nécessaires. . p>
Il semble stupide de créer tous les em> des énoncés dans tous em> des threads du client. Toute rétroaction serait grandement appréciée. P>
3 Réponses :
Une base de données un peu décent sera déjà en cache. Just Fire Ouverture et fermeture de la connexion sur chaque requête à son tour peut effectivement être coûteuse. Une solution commune à qui utilise un Pool de connexion , par exemple C3P0 . P> Connexion # Préparation () Code> Pour le moment, vous devez réellement exécuter la requête. En fait, vous n'avez pas non plus d'autre choix puisque la connexion, la déclaration et les résultatsset devraient être acquis et fermés dans la portée la plus courte possible em>, c'est-à-dire dans un
Essayez enfin code> bloc dans le même méthode que vous exécutez la requête. P>
Cela me semble-t-il comme le type d'optimisation prématurée que je ne m'inquiéterais pas avant d'avoir des informations me disant que cela importait. Si votre accès à la base de données est inefficace, je soupçonnerais votre schéma ou votre accès des valeurs avant de penser aux déclarations préparées de la mise en cache. P>
Je pense que vous vous inquiétez trop, des déclarations préparées bénéficient déjà de plusieurs niveaux de mise en cache: P>
PréparéStatement des objets pour chaque connexion de base de données dans la piscine (et renvoyer un Cached préparé (code> sur les appels suivants sur PréparéStatement Code> sur une connexion). LI>
ul>
Donc, en fait, je dirais même que vous semblez peut-être regarder dans la mauvaise direction. La meilleure pratique Si vous souhaitez concevoir une solution évolutive consiste à utiliser un pool de connexion et à ne pas contenir une connexion plus longue que nécessaire et de libérer les ressources de la base de données) lorsque vous en avez terminé. P>