Bonjour,
Je développe une application web autour de PostgreSQL(8), Tomcat (5.5 ou 6), Stuts2 et Hibernate (3.2).
Je stocke les images en base, sous forme de blobs, que je récupère via Hibernate.
Pour CHAQUE image de la page web, j'ai un tag Struts2 qui appelle une Action Struts 2 (une servlet) qui retourne un flux binaire contenant l'image. La requête d'image est émise depuis le navigateur du client. Assez classique.
Le fait est que si la page contient 50 images, la servlet sera appelée 50 fois, en parallèle, et demandera 50 connexions simultannées au pool de connexions C3PO (le pool fourni par défaut avec Hibernate 3).
Celà multiplié par le nombre d'utilisateurs du site, ça peut vite grimper très haut, trop haut.
Par exemple, par défaut sur ma distrib Ubuntu, Postgres accepte 100 connexions. Et ça finit par coincer même en étant le seul utilisateur. J'ai augmenter le nombre de connexions, mais ça n'est porbablement pas une solution satisfaisante pour un site web de production.
Il y a sûrement une erreur majeure de débutant. Mes questions sont donc les suivantes :
- Quelle solution adopter, en gardant le principe des images en base et de l'utilisation d'Hibernate ?
- Y a-t-il un moyen pour ordonancer les requêtes d'images (les faire arriver en série, pas en parallèle) ?
- Ou bien est-il possible de faire patienter une requête lorsqu'il n'y a plus de connexion disponible, au lieu de retourner une exception ?
- Pour un serveur de prod, jusqu'à combien de connexions maxi est-il raisonnable de pousser un serveur PostgreSQL (sur un serveur virtuel, donc assez modeste) ?
Merci pour votre aide sur ce problème. J'imagine que je ne dois pas être le premier à le rencontrer tellement la situation doit être fréquente !
Cordialement,
Bob
Partager