7
votes

Est-il cher à tenir des déclarations préparées? (Java et JDBC)

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. .

Il semble stupide de créer tous les des énoncés dans tous des threads du client. Toute rétroaction serait grandement appréciée.


0 commentaires

3 Réponses :


10
votes

Une base de données un peu décent sera déjà en cache. Just Fire Connexion # Préparation () 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 , c'est-à-dire dans un Essayez enfin bloc dans le même méthode que vous exécutez la requête.

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 .


0 commentaires

2
votes

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.


0 commentaires

4
votes

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:

  • au niveau de la base de données: une base de données décente réutilisera le plan d'accès pour une déclaration préparée donnée.
  • au niveau du pool de connexion: un pool de raccordement décent cache 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 sur une connexion).

    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é.


0 commentaires