Developpez.com

Télécharger gratuitement le magazine des développeurs, le bimestriel des développeurs avec une sélection des meilleurs tutoriels

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

Le , par ego, Rédacteur
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.


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de OButterlin OButterlin - Modérateur http://www.developpez.com
le 17/11/2009 à 22:46
Citation Envoyé par brice01  Voir le message
Finalement, l'utilisation d'ORM c'est un peu choisir Windev comme outil de dev !
Pas une ligne de code (ou presque), pas de code SQL (commande hlit...).
Où est donc l'intérêt d'utiliser Java ?

J'utilise Windev et je code mes requêtes SQL.
J'ai essayé avec les ordres hlit... hajoute ... et question performance les requêtes SQL sont nettement plus performantes.
Il faut bien entendu maitriser le SQL.
En écrivant du code SQL respectant le norme SQL (la vrai, celle qui est respecté par la majorité des SGDB), on peut s'en sortir sans réécrire du code SQL si on change de SGBD.

Soyons sérieux, Windev a toujours eu comme point faible sa base. Passer à n'importe quelle autre base apporte un plus à une application Windev et un énorme gain en stabilité.
Pour le reste, ça fait des choses simplement... mais question performance, on a eu l'occasion (à l'époque) de comparer un exe windev avec la même fonctionnalité Delphi, il n'y avait pas photo (en faveur de Delphi bien sûr ).

A part ça, un ORM ne veut pas dire "pas de ligne de code", il faut coder les requêtes d'accès, l'aspect transaction, etc... il reste à faire...
On n'a "juste" pas à faire ce qui n'a aucune valeur ajoutée en terme de fonctionnel (à savoir le lien entre les colonnes et les attributs objets et toute cette soupe).
Je me répète (ou alors c'était dans l'autre post) mais un des intérêts principal est de pouvoir manipuler des objets fonctionnels et pas des tables.
Bien utilisé, on a une approche très proche des triggers pour les contrôles (par callback) à la différence près (tout de même) en faveur du SGBDR que si on utilise un autre vecteur d'accès aux données, on perd la centralisation et l'intégrité des contrôles.
Avatar de dingoth dingoth - Membre expérimenté http://www.developpez.com
le 18/11/2009 à 2:36
Mouais bon, je quitte la discussion : je vois le forum dans lequel mes posts ont été transférés, je ne risque pas de voir des personnes un peu plus ouvertes d'esprit à ce qui existe hors ORM...
Avatar de _skip _skip - Expert éminent http://www.developpez.com
le 18/11/2009 à 9:01
Citation Envoyé par brice01  Voir le message
Finalement, l'utilisation d'ORM c'est un peu choisir Windev comme outil de dev !
Pas une ligne de code (ou presque), pas de code SQL (commande hlit...).
Où est donc l'intérêt d'utiliser Java ?

Non, c'est une affirmation fausse. Les ORM ont vraiment pas grand chose à voir avec les facilités que vous propose windev pour l'accès à ses propres outils de bases de données hyper file.
Quant à l'intérêt d'utiliser java, prenez donc la peine de comparer ce que vous pouvez faire avec un ORM du style hibernate et ce que vous pouvez faire avec les ordres H** de windev, à la fois en terme de performance et de fonctionnalités et vous serez fixé.

J'utilise Windev et je code mes requêtes SQL.
J'ai essayé avec les ordres hlit... hajoute ... et question performance les requêtes SQL sont nettement plus performantes.

La raison de ceci est qu'on ne travaille pas avec une base de données client-serveur de la même manière qu'avec un fichier monoposte en accès séquentiel. Vous pouvez affirmer que les ordres HLitXXX de windev sont très limitées, ne supportent pas les jointures et sont peu adaptés à la récupération de lots de données.
Les mappings d'un ORM quant à eux peuvent générer les mêmes requêtes que vous écririez à la main, avec des jointures, des conditions, des sous-requête, bref du pur SQL que vous pouvez monitorer.

Il faut bien entendu maitriser le SQL.
En écrivant du code SQL respectant le norme SQL (la vrai, celle qui est respecté par la majorité des SGDB), on peut s'en sortir sans réécrire du code SQL si on change de SGBD.

Si vous ne faites que des manipulations basiques oui, sinon les adaptations sont vite nécessaires. Surtout avec les dates comme ça a été cité, l'éventuelle absence de type booléen propre, ou les clefs primaires auto-incrémentées. Et quand on parle de programmation sur serveur (souvent utile), là on oublie la portabilité.

Citation Envoyé par ego
Pour ceux qui restent collé à leur SQL, vous vous trimballez, si vous faites du Java, avec vos ResultSet dans toute l'application ?

Non nous avons des outils qui permettent de transformer des resultsets en POJO java fortement typés. Les mappings sont juste un élément de l'ORM que proposent égalements les mappers.
Personnellement j'ai arrêté de croire qu'on pouvait bosser dans un monde merveillleux full OO en faisant semblant que c'est pas une base de données qui est derrière.

Citation Envoyé par ego
S'appuyer sur des proc stockées, c'est franchement pas la solution que j'ai vu dans ma vie d'informaticien depuis maintenant 16 ans. Je suis peut être moi aussi à côté de la plaque mais je ne crois pas avoir fait ou vu de projets avec des proc stockées.

Il est parfois très judicieux lorsque vous calculez des statistiques lourdes, le genre qui vous oblige à appliquer un petit traitement à chaque ligne d'un resultset qui lui aussi nécessite une requête individuelle, de placer ça coté serveur afin de tirer partie des tables temporaires et/ou d'éviter 50'000 aller-retours entre le poste client et la base de données, en comptant l'overhead induit par la conversion du resultset en quelque chose d'utilisable dans votre technologie.

Vous pouvez partir de l'idée que toutes les opérations sur le résultat d'un SELECT dans lequel chaque ligne nécessite une requête individuelle gagnent énormément à être faits coté serveur.
Ils vous économisent les allers-retours réseau et permettent à vos transactions de durer moins longtemps en cas d'UPDATE.

Citation Envoyé par dingoth
Mouais bon, je quitte la discussion : je vois le forum dans lequel mes posts ont été transférés, je ne risque pas de voir des personnes un peu plus ouvertes d'esprit à ce qui existe hors ORM..

Ben si : moi.
Je n'ai pas non plus le sentiment qu'un ORM qui fait plein de magie est la solution parfaite, toutefois je ne suis pas contre un bon mapper.
Avatar de OButterlin OButterlin - Modérateur http://www.developpez.com
le 18/11/2009 à 9:26
Citation Envoyé par _skip  Voir le message
Ben si : moi.
Je n'ai pas non plus le sentiment qu'un ORM qui fait plein de magie est la solution parfaite, toutefois je ne suis pas contre un bon mapper.

Moi aussi, je n'arrête pas de dire qu'il n'y a pas 1 bon outil et les autres mauvais, c'est une question de contexte et d'application...
Avatar de brice01 brice01 - Membre régulier http://www.developpez.com
le 18/11/2009 à 14:29
La raison de ceci est qu'on ne travaille pas avec une base de données client-serveur de la même manière qu'avec un fichier monoposte en accès séquentiel. Vous pouvez affirmer que les ordres HLitXXX de windev sont très limitées, ne supportent pas les jointures et sont peu adaptés à la récupération de lots de données.
Les mappings d'un ORM quant à eux peuvent générer les mêmes requêtes que vous écririez à la main, avec des jointures, des conditions, des sous-requête, bref du pur SQL que vous pouvez monitorer.

Windev a évolué depuis la version 8 : Il fait du client-seveur. Mais là n'est pas la question. Windev fait du multi base sans changer le code source.

Ce que je voulais dire, c'est que à la manière des ORM windev masque et simplifie la persistance des données et ce fonctionnement peut amener à des performances amoindrie.

Je ne juge pas hibernate, ibatis ou tout autre ORM (j'ai jamais essayer .. à tort peut être) etje suis à 100% pour l'ORM pour faire du CRUD (mono-table) et seulement pour le CRUD.
A partir du moment, où la requête est plus complexe (genre sous requêtes....) je ne suis pas sur que les ORM savent le gérer.
De plus pour que le client serveur soit le plus performant possible il faut éviter les aller retour avec le serveur (requete avec sous requetes...).
Avatar de ego ego - Rédacteur http://www.developpez.com
le 18/11/2009 à 14:33
Citation Envoyé par dingoth  Voir le message
Mouais bon, je quitte la discussion : je vois le forum dans lequel mes posts ont été transférés, je ne risque pas de voir des personnes un peu plus ouvertes d'esprit à ce qui existe hors ORM...

On ne dis pas cela. On essaye juste de vous convaincre que les ORM ne sont pas aussi mauvais que certains le pense et que, selon moi, le débat ne devrait pas se situer là ou il a été amené = les performances et la pseudo-négation du SQL.
Encore une fois, il s'agit avant tout de conserver une manipulation homogène des concepts objets côté code. Il n'en reste pas moins important de savoir écrire des requêtes "SQL" sauf qu'on le fait avec un langage qui utilise plutôt le noms des attributs des classes et non leur correspondance en base (les colonnes). Une requête mal foutue en HQL (cas d'Hibernate), sera mal foutue en une fois traduite en SQL.
Il s'agit donc d'une facilité c'est tout.
Le seul problème de faire du SQL "natif" et qu'on est obligé ensuite de transférer les ResultSet dans les objets. C'est franchement inutile quand on a un framework qui le fait pour nous. Oui vous pouvez avoir mis en place des solutions maison qui fonctionnent bien mais comme d'habitude en informatique, pourquoi ré-inventer la roue (l'histoire des mapper peu tout à fait être suffisant dans bien des cas).
Pour faire de la communication réseaux, dans la majorité des cas, je suppose que vous ne faite pas de la manipulation de sockets avec read/write, vous utilisez des protocoles/frameworks de plus haut niveau et vous avez raisons dans 99% des cas. Eh bien avec les ORM c'est un peu pareil.
Avatar de Arkhena Arkhena - Membre confirmé http://www.developpez.com
le 18/11/2009 à 15:41
Bonjour,

En regardant les bases de données que je gère, le souci ne vient pas de l'utilisation d'un ORM mais du fait qu'on confie à des apprentis-jardiniers la modélisation des données!!!

Après on nous demande de tuner des installs pour améliorer les performances et on fait ce qu'on peut mais on ne peut pas faire de miracle...

Ensuite, les ORM ont un inconvénient certain pour moi : ça fait croire aux développeurs qu'ils n'ont rien à connaître en ce concerne les BDD. Du coup, on se retrouve à débugguer l'appli à leur place parce qu'ils ont fait une faute de frappe dans un fichier de config et parce qu'ils sont incapables de se connecter à une base de données en direct pour tester leur requête!

Voilà pour moi!

Arkhena
Avatar de _skip _skip - Expert éminent http://www.developpez.com
le 18/11/2009 à 15:50
Citation Envoyé par brice01  Voir le message
Windev a évolué depuis la version 8 : Il fait du client-seveur. Mais là n'est pas la question. Windev fait du multi base sans changer le code source.

Je sais qu'il existe une version client serveur, je me suis assez battu avec. L'aspect multi-base concerne les ordres H* et les bindings db-fenetre, et encore c'est si vous voulez bien acheter les accès natifs. Vous verrez toutefois que changer de base aura un impact sur votre schéma de données, même si une partie des changements est encapsulée par les drivers PCSOFT, ce n'est pas trivial et ça ne concerne pas les requêtes écrites à la main.

Vous pourriez aussi dire qu'on peut faire du multi base via OLEDB ou ODBC, mais là aussi hors de la théorie ça pose vite des soucis.

Ce que je voulais dire, c'est que à la manière des ORM windev masque et simplifie la persistance des données et ce fonctionnement peut amener à des performances amoindrie.

Je ne juge pas hibernate, ibatis ou tout autre ORM (j'ai jamais essayer .. à tort peut être) etje suis à 100% pour l'ORM pour faire du CRUD (mono-table) et seulement pour le CRUD.
A partir du moment, où la requête est plus complexe (genre sous requêtes....) je ne suis pas sur que les ORM savent le gérer.
De plus pour que le client serveur soit le plus performant possible il faut éviter les aller retour avec le serveur (requete avec sous requetes...).

Vous sous-estimez totalement les ORM, les sous-requêtes, les jointures conditionnelles et le chargement efficace de graphes d'objets sont pris en charge... en générant simplement du SQL dynamiquement.
Avatar de ego ego - Rédacteur http://www.developpez.com
le 18/11/2009 à 17:07
Citation Envoyé par Arkhena  Voir le message
Bonjour,

En regardant les bases de données que je gère, le souci ne vient pas de l'utilisation d'un ORM mais du fait qu'on confie à des apprentis-jardiniers la modélisation des données!!!

Après on nous demande de tuner des installs pour améliorer les performances et on fait ce qu'on peut mais on ne peut pas faire de miracle...

Ensuite, les ORM ont un inconvénient certain pour moi : ça fait croire aux développeurs qu'ils n'ont rien à connaître en ce concerne les BDD. Du coup, on se retrouve à débugguer l'appli à leur place parce qu'ils ont fait une faute de frappe dans un fichier de config et parce qu'ils sont incapables de se connecter à une base de données en direct pour tester leur requête!

Voilà pour moi!

Arkhena

Sur cet aspect, je suis 100% d'accord avec toi.
Mais ceci est vraiment un problème d'éducation à la base (c'est le cas de le dire).
Il est totalement clair que la conception de la base EST LE NERF DE LA GUERRE, avec aussi son mode d'utilisation par l'application.
De ma modeste expérience, les problèmes de performance dans les applications sont bien souvent (je ne veux pas donner de chiffre mais je pencherai avec quelque chose de très gros !!) liés à la conception de la base et aux requêtes mal foutues. Ce n'est pas une garantie, je vous l'accord, mais je suis "assez vieux" dans l'informatique, j'ai commencé par du Pro*C avec Oracle dans le code C donc le SQL "natif", j'en ai fait pas mal.
Mais pour autant, je trouve que les ORM sont vraiment une très bonne solution. Ca ne veut pas dire qu'il faut mettre les DBA à la poubelle et qu'il ne faut pas savoir concevoir une base (tables, vues, indexes, tablespaces, répartition disque,...)
Avatar de captainKirk captainKirk - Membre actif http://www.developpez.com
le 28/01/2010 à 18:33
Citation Envoyé par GLDavid  Voir le message
Hello

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 ?

@++

De toute manière si on souhaite faire les choses correctement il faut développer une couche d'abstraction pour dissocier l'accès aux données de l'interface. En général ca revient en gros à écrire une classe pour chaque table avec une propriété pour chaque champ. Alors si un orm le fait à ma place, je suis preneur, quitte à faire le ménage après coup en supprimant les classes dont je n'ai pas l'utilité. Il me semble que ca peut apporter un bon gain en temps de développement mais je n'ai encore jamais utilisé ce genre d'outils, pour l'instant j'utilise encore de bonnes vieilles procédures stockées
Avatar de NicoL__ NicoL__ - Membre confirmé http://www.developpez.com
le 05/10/2011 à 14:37
Donc à la réponse : Comment sont perçus les outils de mapping Objet /Relationnel (JPA, Hibernate, etc.) par vos DBA ? On peut dire que les DBA réagissent mal !
Si on se tourne du coté des éditeurs et autre on remarquera que l'ORM a pris une grand place : Microsoft met en avant Entity Framework et en 2010 ne parle plus trop du bienfait des procsock et JPA est là pour unifier tout le monde java. Donc l'ORM monte en puissance.
Et puis JPA est portable sur beaucoup d'implémentation donc beaucoup de base (y a des limitations potentielles) et même sur des bases NoSql (là y a plus de DBA pour ronchonner) le genre de techno poussée par google.
L'ORM permet des gains de productivité du développeur au détriment d'un optimisation fine et des gain de performance. Or on compense la performance avec des serveurs de plus en plus puissants. Alors que le développeur il coûte toujours plus cher...
Offres d'emploi IT
Ingénieur développeur .net h/f
Experis Executive - Rhône Alpes - Lyon (69000)
/bin /echo
CodinGame - Ile de France - Montpellier
Développeur javascript confirmé h/f
ACENSI - Ile de France - Paris (75000)

Voir plus d'offres Voir la carte des offres IT
Responsables bénévoles de la rubrique Java : Mickael Baron - Robin56 -