Persistance en Java : Perception des outils de mapping Objet / Relationnel
. Votre DBA est-il réticent ?

Le , par ego

0PARTAGES

1  0 
Rencontrez-vous des réticences d'usage des outils de mapping O/R de vos DBA
Bonjour,

concernant les outils de mapping O/R, JPA, Hibernate et autres, rencontrez-vous des réticences de la part de votre DBA ? Des "peurs" du genre : Ouhai avec ces outils, on ne maitrise pas le SQL exécuté, il est préférable d'avoir les requêtes en dur au moins on sait ce que l'on fait

Si bien sûr il y a des DBA (des vrais de vrais ) qui peuvent se prononcer, ça serait encore mieux

Merci à vous

[Edit]
Pour information, un débat existant complémentaire qui traite du point de vue particulier de la performance : Les frameworks de persistance (ORM) sont-ils dangereux pour les performances ?

N'hésitez pas à faire un retour d'expérience sur d'autres axes de perception / évaluation.

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de OButterlin
Modérateur https://www.developpez.com
Le 15/11/2009 à 12:57
Non chez nous...

Ce n'est pas vraiment le rôle d'un DBA de se prononcer sur une solution technique, il est plutôt là pour optimiser la base et la "gérer" au sens large.

De plus, ce n'est pas hibernate ou un orm qui génère forcément une diminution des performances mais l'application qui peut être plus ou moins gloutonne en requête DB ou qui n'optimise pas ses accès.
Ce sont plutôt les chef de projets qui expriment des craintes par rapport aux orm (surtout ceux qui ne veulent pas se remettre en cause).
Pour ce qui est de la "non maîtrise" du code, c'est plus ou moins vrai...
On peut tout de même agir sur la manière de générer la requête.
J'ai fait des applications de gestion avec Hibernate et d'autres sans.
Je ne sent pas de baisse significative des performances qu'on pourrait imputer à l'ORM
0  0 
Avatar de Ricky81
Expert éminent sénior https://www.developpez.com
Le 15/11/2009 à 13:16
Pour information, un débat existant complémentaire qui traite d'un axe particulier (performances) : Les frameworks de persistance (ORM) sont-ils dangereux pour les performances ?
0  0 
Avatar de OButterlin
Modérateur https://www.developpez.com
Le 15/11/2009 à 15:15
Citation Envoyé par Ricky81 Voir le message
Pour information, un débat existant complémentaire qui traite d'un axe particulier (performances) : Les frameworks de persistance (ORM) sont-ils dangereux pour les performances ?
Je ne l'avais pas vu celui là (et quelque part, après avoir lu les 6 pages, on reste baba). Personnellement, je trouve l'avis totalement partial, visiblement sans pratique d'un orm... bref, un gars qui nous dira que programmer en assembleur c'est vachement plus performant...

Je préfère perdre 100ms pour un traitement particulier que de perdre 3 semaines à essayer de comprendre ce qu'on avait voulu faire et à retrouver la couche impliquée... (mais non, je n'exagère pas )
Quant à l'aspect portabilité (inter-bases), la procédure stockée n'est vraiment pas la panacée.
Bon, pour ne pas paraitre aussi "jusqu'au boutiste" que l'auteur, je dirais pour ma part qu'il vaut mieux tirer partie des avantages des uns et des autres plutôt que de dire "ça c'est de la merde et ça c'est le saint graal".
Rien n'empêche de faire faire 95% du boulot à l'ORM et de passer par des procédures stockées ou du sql natif pour le reste.
0  0 
Avatar de Luc Orient
Membre émérite https://www.developpez.com
Le 15/11/2009 à 18:17
Citation Envoyé par OButterlin Voir le message
...
Ce n'est pas vraiment le rôle d'un DBA de se prononcer sur une solution technique, il est plutôt là pour optimiser la base ...
Optimiser une Base de données sans avoir la connaissance très précise des accès réalisés m'apparaît pour le moins difficile ... mais je pars du postulat, peut être faux après tout, que ces outils de mapping n'offrent pas une bonne visibilité sur le SQL généré ou que ce dernier est trop générique pour être raisonnablement optimisé ...
0  0 
Avatar de OButterlin
Modérateur https://www.developpez.com
Le 15/11/2009 à 18:57
Que veux-tu dire par "visibilité du sql généré" ?
La possibilité de voir ce code ou d'intervenir dessus ?

Hibernate (pour en citer un) permet de faire des choses très précises en terme de requête.
Dans la mesure où on utilise l'orm pour la création/mise à jour des enregistrements (c'est évidement le cas général), il va de soit que ça se fait sur une "entité" représentant un enregistrement complet (on peut également jouer sur les mises à jour cascade pour propager les modifications sur des fils à partir du père). C'est ce qu'on appelle généralement un CRUD. Là, il n'y a guère d'optimisation possible... En JDBC, on pourrait faire plus fin...

Pour la partie extraction des données, on peut par contre faire à peu près ce qu'on veut, ne récupérer que quelques colonnes, etc...
Bref, j'attends de savoir ce que tu voulais dire avant de continuer...

Pour le boulot d'un DBA, je suis bien d'accord qu'il doit connaître la nature des accès pour les optimiser... ce qui ne veut pas dire que son avis dans le choix d'une technologie sera déterminant... Si le projet consistait à développer une application multi-client, multi-bases (cas d'un progiciel), je pense qu'on ne prendrait même pas la peine de le consulter...

Pour le reste, un DBA pourra en analysant la charge du SGBDR définir de nouveaux index ou vue pour optimiser les temps de réponses.
0  0 
Avatar de ego
Rédacteur https://www.developpez.com
Le 15/11/2009 à 20:25
mais je pars du postulat, peut être faux après tout, que ces outils de mapping n'offrent pas une bonne visibilité sur le SQL généré ou que ce dernier est trop générique pour être raisonnablement optimisé ...
Il n'est pas générique, absolument pas.
Le truc c'est simplement de pouvoir écrire, par exemple si on prend l'exemple d'Hibernate, un ordre simple comme (genre) :

Code : Sélectionner tout
Dossier d = getJdbcTemplate().load(12,Dossier.class);
où 12 est la clé primaire du Dossier recherché.

Dans le fichier de mapping, on a décrit par exemple que :

Les objets Dossier sont stockés dans la table TDOSSIER
L'attribut id est stocké dans la colonne ID
L'attribut numero est stocké dans la colonne C-NUM
L'attribut Libellé est stocké dans la colonne N-LIB

Hibernate va alors fabriquer la requête :
Code : Sélectionner tout
1
2
SELECT d.id, d.c-num,d.n-lib FROM tdossier d WHERE d.id = 12
C'est tout.
Il n'y a rien, absolument rien de générique. Tout peut être anticipé en fonction du mapping.
L'idée du langage HQL d'Hibernate, qui est très très proche de SQL, est simplement de permettre de nommer les noms Java des objets/attributs à la place de leur correspondant SQL. Cela permet avant tout l'écriture d'un code "SQL" (HQL donc) proche du fonctionnel mais qui finalement ressemble à ce que l'on aurait écrit en SQL natif.
Dans des cas avec jointures nécessaire, il suffit aussi de faire la jointure en "objet" en mettant une clause where avec égalité des 2 clés primaires des objets et s'il y a une table de jointure, Hibernate génèrera la requête SQL adéquate.
Bref, il n'y a rien de générique ni de magique, tout est régit par le fichier de mapping.
D'ailleurs, il est possible d'activer les traces SQL afin, notamment lors des tests, de demander à logger les ordres SQL effectivement envoyés.
Dans ces cas plus complexes, on peut parfois même être étonné de l'ordre généré qui est mieux foutu que ce que l'on imaginait faire "à la main".
0  0 
Avatar de Luc Orient
Membre émérite https://www.developpez.com
Le 15/11/2009 à 20:57
Citation Envoyé par OButterlin Voir le message
Que veux-tu dire par "visibilité du sql généré" ?
La possibilité de voir ce code ou d'intervenir dessus ?
Les deux mon général ...

Pour le reste, un DBA pourra en analysant la charge du SGBDR définir de nouveaux index ou vue pour optimiser les temps de réponses.
Nous on préfère voir les principaux accès avant ... On fait du préventif plutôt que du curatif ... Même si l'un n'exclut pas l'autre ...
0  0 
Avatar de GLDavid
Membre expert https://www.developpez.com
Le 16/11/2009 à 8:49
Bonjour

Je n'ai pas apporté de réponses.
Et pour cause, je suis, entre autre, DBA PostgreSQL au sein de la société pour laquelle je bosse (société de consultance en bioinformatique en Belgique).
Je n'ai pas d'avis concernant ces solutions de mapping ER->Objets. Je reste encore attaché au SQL et c'est le cas pour les développeurs. On se débrouille plutôt bien en SQL.
Pour le moment, nous ne voyons pas ce que ces API peuvent nous apporter. Manque de connaissance ? Certainement. Il n'empêche que pour le moment, nos clients ne nous demandent pas ces outils. Remarquez que nos clients partent du principe que peu importe le vin tant qu''ils aient l'ivresse. En clair, on a carte blanche sur les outils (tant que ça matche avec leur infra-structure). En interne à présent, étant DBA, je ne suis pas hostile à l'utilisation de ces outils. Je ne demande qu'à voir ce que ça peut apporter de plus. Si ça permet un gain de rapidité par rapport à une requête SQL, pourquoi pas.

@++
0  0 
Avatar de ego
Rédacteur https://www.developpez.com
Le 16/11/2009 à 9:23
Mais l'objectif n'est pas d'aller "plus vite" côté SQL
C'est de fournir un niveau d'abstraction plus élevé que SQL pour écrire des requêtes vers la base. On utilise les même termes qu'au niveau objet et c'est le framework qui fait la traduction.
C'est vrai que le framework apporte des éléments pour les perfs comme les caches de premier et second niveau mais je dirai que l'essentiel n'est pas là.
C'est comme quand on a inventer le C afin de ne plus écrire de l'assembleur, l'idée première était de permettre d'écrire plus facilement.
Côté base de données, quand on a des problèmes de perfs, c'est plus à cause d'une mauvaise conception du code et de la base elle-même qu'à cause des requêtes elles-mêmes.
0  0 
Avatar de GLDavid
Membre expert https://www.developpez.com
Le 16/11/2009 à 9:37
Hello

Citation Envoyé par ego Voir le message
Mais l'objectif n'est pas d'aller "plus vite" côté SQL
C'est de fournir un niveau d'abstraction plus élevé que SQL pour écrire des requêtes vers la base. On utilise les même termes qu'au niveau objet et c'est le framework qui fait la traduction.
C'est vrai que le framework apporte des éléments pour les perfs comme les caches de premier et second niveau mais je dirai que l'essentiel n'est pas là.
C'est comme quand on a inventer le C afin de ne plus écrire de l'assembleur, l'idée première était de permettre d'écrire plus facilement.
Côté base de données, quand on a des problèmes de perfs, c'est plus à cause d'une mauvaise conception du code et de la base elle-même qu'à cause des requêtes elles-mêmes.
Merci pour ces infos mais je n'ai jamais dit que ça permettait d'aller plus vite côté SQL. J'ai bien compris qu'on s'affranchit du SQL mais que ça n'accélerait pas les requêtes SQL. C'est une autre manière d'interroger la base.
Maintenant, tu mentionnes que cette solution apporte un niveau d'abstraction. Mouais... Franchement, il me semble que la création des tables et le fait de produire un schéma relationnel est déjà une abstraction. Autre chose, si ces frameworks miment les tables en objets, dites, pour des grosses bases de données (>100 tables) votre application doit grossir méchamment, non ?
Bref, j'attends plus d'être convaincu par ces frameworks. Je comprends que des gens soient fâchés par SQL mais à mon humble avis, c'est pas demain la veille que vous vous débarasserez du langage qui a permis d'interroger clairement une base.

@++
0  0 
Responsables bénévoles de la rubrique Java : Mickael Baron - Robin56 -

Partenaire : Hébergement Web