-
Questions JDBC et SGBD
Bonjour,
J'ai quelques petite questions sur le fonctionnement des SGBD en general en relation avec JDBC alors j'esperais que vous accepteriez de m'aider un peu ;)
Disons que jai un serveur java qui doit renvoyer les resultats de requetes recu par plusieur clients de facon asynchrone.
Ce serveur devra donc se connecter localement sur la base de donnees et executer plusieur requete simultanement pour ensuite envoyer les resultats via un socket aux clients.
je me demandais alors quelque petites questions:
1- Est ce que je doit faire
Code:
Connection connexion = DriverManager.getConnection("...")
une nouvelle connections pour chaque requete ou via une seule connection qui resterai ouverte indefiniment je peux executer plusieur requete simultanement sans que le SGBD les executes une a la suite de l'autre ?
En gros via une seule connection et des requetes executer dans des threads differents simultanement, est ce que les SGBD vont executer les actions une a la suite de l'autre ?
Je sais que lorsqu'il y a plusieurs connections la pluspart des SGBD sont multi-threader, mais dans le cas d'une connection unique qui execute plusieur requetes ?
(jai reformuler 3 fois ma questions vous avez surement compris. :lol: passons a la 2eme question.)
2- Sachant que la base de donnees risque de contenir 5000 enregistrements environ et que durant un peak elle devra parfois executer au moins 250 requetes simultanements..
Quel SGBD me recommenderiez vous pour ce type d'utilisation ?
est ce que hsqldb est adapter pour ce que je veux faire ?
Merci d'avance pour vos reponses !
-
Je pense que tu trouveras une bonne partie des réponse ici :
http://java.developpez.com/faq/jdbc/?page=dataSources
en résumé :
1. non il vaut mieux utiliser un dataSources
2. 5000 enregistrements c'est peu pour un base de données, 250 simultanément ça commence à faire beaucoup (tu as combien d'utilisateurs, qui fait toutes ces requêtes ?). Avec 5000 enregistrements, le cache (EHCache par exemple) sera la solution pour garder de bonnes performances.
Avec du cache ça devrait passer avec n'importe quelle base de données de MySql à Oracle donc pourquoi pas hsqldb. En tout cas sur leur site ils disent que ça marche bien.
-
hmm jai oublier de specifier que le client/serveur dont je parle est 'java se' et non pas 'javaee'.
-
bonjour,
Concrètement ce qu'il te faut c'est un pool de connexion !
Tu peux le faire toi même : Connection pool
Ou utiliser un pool existant : DBCP
-
Oui le Datasource permet de créer un pool de façon transparente, ce n'est pas spécifique à JEE mais à JDBC.
-
5000 enregistrements ça donne pas vraiment une idée de la volumétrie.
Une table de une colonne numérique avec 5,000,000 d'enregistrements se traite plus facilement qu'une table de 5,000 enregistrements avec 300 colonnes comprenant des BLOBs et autres joyeusetés.
250 connections simultanées ne sera pas réellement possible. En revanche tu en auras sûrement une 20e qui pourront être actif en même temps. Les autres seront en attente dans une file.
Si les temps de traitements sont courts, avec un pool de connexion, tu n'y verras que du feu.
Ce que je te conseille c'est de faire des tests de montée en charge, pour voir comment réagit l'application.
-
Merci pour tout vos reponses, maintenant je sais a quoi m`en tenir. :ccool: