Mysql
 sql >> Base de données >  >> RDS >> Mysql

Performances Hibernate, JDBC et Java sur des ensembles de résultats moyens et volumineux

Pouvez-vous faire un test de fumée avec la requête simple possible comme :

SELECT current_timestamp()

ou

SELECT 1 + 1

Cela vous indiquera quelle est la surcharge réelle du pilote JDBC. De plus, il n'est pas clair si les deux tests sont effectués à partir de la même machine.

Exécutez la même requête plusieurs milliers de fois en Java. La JVM a besoin d'un certain temps pour s'échauffer (chargement de classe, JIT). Aussi je suppose SimpleJDBC.getConnection() utilise le regroupement de connexions C3P0 - le coût d'établissement d'une connexion est assez élevé, de sorte que les premières exécutions peuvent être lentes.

Préférez également les requêtes nommées aux requêtes ad-hoc ou aux requêtes par critères.

Hibernate est un framework très complexe. Comme vous pouvez le constater, il consomme 75 % du temps d'exécution global par rapport à JDBC brut. Si vous avez besoin d'ORM brut (pas de chargement paresseux, de vérification sale, de mise en cache avancée), pensez à mybatis . Ou peut-être même JdbcTemplate avec RowMapper abstraction.

Pas vraiment. Consultez le Chapitre 19. Amélioration des performances dans la documentation Hibernate. Il y a beaucoup de réflexion qui se passe là-bas + génération de classe. Encore une fois, Hibernate n'est peut-être pas la meilleure solution lorsque vous souhaitez extraire chaque milliseconde de votre base de données.

Cependant c'est un bon choix lorsque vous souhaitez améliorer l'expérience utilisateur globale grâce à une prise en charge étendue de la mise en cache. Découvrez les performances doc à nouveau. Il parle principalement de mise en cache. Il y a un cache de premier niveau, un cache de deuxième niveau, un cache de requête... C'est l'endroit où Hibernate pourrait en fait surpasser JDBC simple - il peut mettre en cache beaucoup d'une manière que vous ne pourriez même pas imaginer. D'autre part, une mauvaise configuration du cache entraînerait une configuration encore plus lente.

Consultez :Mise en cache avec Hibernate + Spring - quelques questions !

JVM (en particulier dans serveur configuration) est assez rapide. La création d'objets sur le tas est aussi rapide que sur la pile, par exemple. C, la collecte des ordures a été grandement optimisée. Je ne pense pas que la version Java exécutant simplement JDBC serait beaucoup plus lente par rapport à une connexion plus native. C'est pourquoi j'ai suggéré quelques améliorations à votre benchmark.

Je pense que JDBC est un bon choix si les performances sont votre plus gros problème. Java a été utilisé avec succès dans de nombreuses applications gourmandes en bases de données.