Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3525 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Java et le SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Java et le SQL

n°833022
Mazda3
Posté le 26-08-2004 à 16:35:40  profilanswer
 

Pour de grosses extraction de données complexes sur une BD
 
Etes-vous plutot du genre : "Je genere dynamiquement ma MEGA requete SQL et je l'execute pour traiter les resultats, vive les left join, union, count, group by, etc ..."
 
Ou : "Je prefere faire plein de petites requetes très simple pour construire mes objets et ainsi de retrouver par moi même les resultats"
 
et quel est selon vous la plus rapide en terme d'execution ?

mood
Publicité
Posté le 26-08-2004 à 16:35:40  profilanswer
 

n°833030
drachenkil​ler
Posté le 26-08-2004 à 16:40:26  profilanswer
 

Perso, je pense que l plus rapide en execution sera certainement la première solution car pour obtenir un meme resultat, tu sera d'une façon ou d'une autre ammenée a faire les memes opérations, de plus avec la seconde solution, a chaque requette, tu prend du temps pour connect, deconnect, transfert de data,...

n°833040
savory
Posté le 26-08-2004 à 16:48:33  profilanswer
 

Je suggere la deuxieme solution en utilisant des PreparedStatement enfin je pense aussi que ca depend du temps que ta base aura à traiter cette requete.

n°833042
Mazda3
Posté le 26-08-2004 à 16:49:47  profilanswer
 

Citation :

connect, deconnect, transfert de data,...


 
Mais en utilisant un pool de connexions, ça reduit deja enormement les temps de connexions.
 
Je sais que ça peut paraitre bete la question qui suit mais en terme de calcul complexe et elevé, une BD est plus rapide que la JVM ?


Message édité par Mazda3 le 26-08-2004 à 16:49:58
n°833049
savory
Posté le 26-08-2004 à 16:53:07  profilanswer
 

drachenkiller a écrit :

Perso, je pense que l plus rapide en execution sera certainement la première solution car pour obtenir un meme resultat, tu sera d'une façon ou d'une autre ammenée a faire les memes opérations, de plus avec la seconde solution, a chaque requette, tu prend du temps pour connect, deconnect, transfert de data,...


 
Ca depend les temps pour connect/deconnect peuvent etre paliées via un un pool de connexion en base et l'objet preparedstatement prepare la connexion avant meme l'envoi de la requete ce qui te permet de gagner du temps a l'execution et surtt de pouvoir rejouer la requete autant de fois que necessaire ...

n°833051
savory
Posté le 26-08-2004 à 16:53:37  profilanswer
 

lol mazda m'a devancé ;)

n°833052
ohyes
oooooohYes !
Posté le 26-08-2004 à 16:54:27  profilanswer
 

Pourquoi ne pas tester sur 100 puis 1000 lignes.
Tu feras vite la différence.
 
Mais même chose que Savory, la deuxieme solution est mieux, surtout si la base doit rester accessible et performante.
Là au moins les calculs seront sur la machine où le prog java tourne.

n°833131
phnatomass
Je m'empare de ton esprit !!
Posté le 26-08-2004 à 18:23:34  profilanswer
 

Pour moi il est mega évident que ta première solution sera la meilleure. Tout les bases de données sont optimisé au maximum pour traiter le SQL.  
Faire un premier SELECT en java puis récuperer le resultat que tu stockeras en memoire, traiteras puis tu enchaineras d'autres requete en fonction des résultats précedents et de d'autres parametres sera très vraisemblablement moins rapide qu'une bonne grosse vielle requete SQL.
Les bases de données comme Oracle utilisent des plan d'execution permettant de manière implicite d'optimiser la requete SQL.
Cela ne te soustrait pas d'utiliser en plus un pool de connexion et un preparedStatement pour ta/tes requetes.  
Attention tout de même à ta méga requete à bien faire des jointures sur des clefs des index etc ...

n°833142
phnatomass
Je m'empare de ton esprit !!
Posté le 26-08-2004 à 18:32:30  profilanswer
 

mazda3 a écrit :


Mais en utilisant un pool de connexions, ça reduit deja enormement les temps de connexions.
 
Je sais que ça peut paraitre bete la question qui suit mais en terme de calcul complexe et elevé, une BD est plus rapide que la JVM ?


Cela n'a pas vraiment de sens de comparer la vitesse de la BD et de la JVM mais pour exemple :
Select a,b,c from ta_table where condtions
puis traitement en java du résultat puis  
Select a,b,c from ta_table where d_autres_condtions
puis traitement et concaténation en java du résultat sera moins rapide
que  
Select a,b,c from ta_table where condtions
UNION
Select a,b,c from ta_table where d_autres_condtions
puis traitement en java.
 
Evidemment un preparedStatement reduira l'ecart entre les 2 mais le 1er cas sera toujours plus rapide.
 
Il existe tout de même des exceptions lié à la cardinalité des tables si la requete est horrible en terme de complexité
ex : select a.a1, b.b1 from a,b
Dans ce cas mieux vaut  
select a1 from a
suivi de  
select b1 from b

n°840027
brisssou
8-/
Posté le 02-09-2004 à 14:59:20  profilanswer
 

je choisirait plutôt ma 1° soluce, par expérience :
j'ai une requête un peu maousse a faire, et je suis obligé de passer par des petites requêtes de rien (bicause join impossible entre clusters DB2), et du coup, je génère la bagatelle de 1300 requêtes (ce qui est bien mais pas top), et du coup, 7 minutes de traitement, BAD !
Alors qu'une big requête serai traitée bien plus rapidement par le serveur SQL, c'est son taf.
 
m'enfin ça n'est que mon avis.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Java et le SQL

 

Sujets relatifs
[Java][PHP][SQL] Debutant: Par quoi commencer??sql to java
[javax][sql]Connection java/sSql Server[java][sql]connection java/Sql Server
SQL Quote Java[JAVA] Accéder à une base MS Access (ou SQL Server)
Mais où est le problème ?? Sql/Java [RESOLU][JAVA - ORACLE] Développement en java à la place de PL/SQL
[Java-Jdbc] requêtes SQL n'aboutissant pas ![JAVA et SQL ] comment naviguer correctement dans les requetes ??
Plus de sujets relatifs à : Java et le SQL


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)