Application de JDBC dans les essais de performance

InfoQ 2022-06-23 19:26:46 阅读数:166

applicationjdbcdanslesessais
Auteur:Huang Yandi

Préface

Pouvons - nous contourner http Accord,Tester directement la performance de la base de données?Pensez - vous que l'exportation à partir de la base de données CSV Il est difficile de créer des fichiers pour les données piézométriques?Comment nettoyer les données après l'essai de pression?Peut - on insérer dans la base de données(Supprimer)Enregistrer l'affirmation de la demande de mesure de pression?Utilisez l'outil de test de performance Alibaba Cloud PTS Les problèmes ci - dessus peuvent être facilement résolus.

Qu'est - ce que JDBC

JDBC(Java DataBase Connectivity,Java Connexion à la base de données)C'est un moyen d'exécuter SQL Statement Java API,Un accès uniforme à une variété de bases de données relationnelles,Il est utilisé par un groupe Java Composition des classes et des interfaces écrites dans la langue.JDBC Fournit une référence,Cela permet de construire des outils et des interfaces plus avancés,Permettre aux développeurs de bases de données d'écrire des applications de base de données.

En termes simples,JDBC Trois choses à faire:Connexion à la base de données、Envoyer les déclarations de la base de données des opérations et traiter les résultats.

JDBC Principes de conception

Structure générale

1.png
JDBC Un ensemble de critères d'interaction avec la base de données a été élaboré,Les fournisseurs de bases de données fournissent la mise en oeuvre de cet ensemble de normes,De cette façon, l'unité JDBC Interfaces pour connecter différentes bases de données.Pour ainsi dire JDBC  Le but est de masquer les différences dans la base de données sous - jacente , Permet à l'utilisateur de suivre  JDBC  Le code écrit peut être exécuté sur une variété de bases de données différentes .Comment est - ce possible??Comme le montre la figure ci - dessous:

2.png
JDBC Défini Driver Interface, Cette interface est le pilote de la base de données ,  Toutes les opérations liées à la base de données finissent ici  , Le fournisseur de base de données doit implémenter cette interface , Grâce à cette interface, l'appelant de l'application supérieure interagit avec la base de données spécifique sous - jacente .Driver C'est par JDBC Fourni DriverManager Enregistré, Le Code enregistré est écrit dans  Driver  Dans le bloc statique de ,Par exemple: MySQL  Le Code d'enregistrement est le suivant: :

static {
 try {
 java.sql.DriverManager.registerDriver(new Driver());
 } catch (SQLException E) {
 throw new RuntimeException("Can't register driver!");
 }
 }

Spécification définie comme un entraînement  Driver, Son but principal est d'établir une connexion à la base de données , L'interface est donc simple. ,Comme suit:

public interface Driver {
 //Établir une connexion
 Connection connect(String url, java.util.Properties info)
 throws SQLException;
 boolean acceptsURL(String url) throws SQLException;
 DriverPropertyInfo[] getPropertyInfo(String url, java.util.Properties info)
 throws SQLException;
 int getMajorVersion();
 int getMinorVersion();
 boolean jdbcCompliant();
 public Logger getParentLogger() throws SQLFeatureNotSupportedException;
}

En tant que Driver Manager of DriverManager, Il n'est pas seulement responsable  Driver Inscription/Déconnecter, Vous pouvez également obtenir la connexion directement .Comment est - ce possible??Observez le code ci - dessous pour trouver, C'est en fait une traversée qui a été enregistrée  Driver, Trouver une connexion réussie  Driver,Et Connection Retour,DriverManager Comme un agent, Le processus d'établissement d'une véritable connexion a - t - il été confié à des  Driver.

for(DriverInfo aDriver : registeredDrivers) {
 // If the caller does not have permission to load the driver then
 // skip it.
 if(isDriverAllowed(aDriver.driver, callerCL)) {
 try {
 println(" trying " + aDriver.driver.getClass().getName());
 Connection con = aDriver.driver.connect(url, info);
 if (con != null) {
 // Success!
 println("getConnection returning " + aDriver.driver.getClass().getName());
 return (con);
 }
 } catch (SQLException ex) {
 if (reason == null) {
 reason = ex;
 }
 }

 } else {
 println(" skipping: " + aDriver.getClass().getName());
 }

 }

Connection Conception

Grâce à la section précédente, nous savons que le fournisseur de base de données a réalisé Driver Interface pour fournir des services aux utilisateurs ,Driver La méthode de base de l'interface est d'obtenir la connexion .Connection Est l'interface centrale avec la base de données , Regardons la conception .

3.png
En regardant les dessins de conception, nous avons constaté qu'il existe principalement deux types d'interfaces :DataSource Et Connection. Nous allons passer en revue .

  • DataSource

Regardez directement le code source,Comme suit, L'approche de base pour le découvrir  Driver C'est pareil, Aussi obtenir une connexion .Alors pourquoi? DataSource Et alors??Driver  N'est - ce pas la connexion elle - même? ?On va voir DataSource  Comment obtenir une connexion .

 public interface DataSource extends CommonDataSource, Wrapper {
 Connection getConnection() throws SQLException;
 Connection getConnection(String username, String password)
 throws SQLException;
}

Mais nous avons découvert JDBC Seulement défini DataSource Interface pour, Aucune mise en œuvre spécifique n'est donnée ,En bas, on prend Spring Réalisé SimpleDriverDataSource Par exemple, Regarde ce qu'il fait. ,Les codes sont les suivants:,Découverte DataSource De getConnection(...)Méthodes, Et c'est fini.  driver.connect(...) Pour vraiment se connecter . Alors revenons à ce que nous avons décrit au début , Driver  C'est l'interface réelle avec la base de données. .

protected Connection getConnectionFromDriver(Properties props) throws SQLException {
 Driver driver = getDriver();
 String url = getUrl();
 Assert.notNull(driver, "Driver must not be null");
 if (logger.isDebugEnabled()) {
 logger.debug("Creating new JDBC Driver Connection to [" + url + "]");
 }
 return driver.connect(url, props);
 }

Alors la question se pose,Pourquoi faut - il DataSource Une telle interface, Ne fais pas ça. ?Apparemment non..DataSource  C'est une version améliorée.  Driver. Il laisse le processus de connexion du noyau à  Driver Mise en œuvre, Pour créer un cache , Gérer des choses comme les transactions distribuées et les pools de connexions qui ne semblent pas liées à l'établissement d'une connexion à gérer par vous - même . Comme indiqué sur le dessin de la classe ,Par PTS Utilisation Druid Par exemple, le pool de connexion:

  • ConnectionPoolDataSource:Mise en œuvre du pool de connexion, Cette implémentation de source de données ne crée pas directement une connexion physique à la base de données , C'est une réalisation logique. , Son rôle est de mettre en commun les connexions physiques à la base de données .
  • PooledConnection:Coopération ConnectionPoolDataSource, Obtenir un objet Pool à partir de lui  PooledConnection,Encore une fois PooledConnection  Obtenir indirectement une connexion physique .

Apparemment., Grâce au pool de connexions, nous pouvons nous retirer de la gestion des connexions , Améliorer l'efficacité des connexions , Peut également augmenter la capacité de pression de la presse .

Statement Conception

Après avoir établi la connexion, L'utilisateur peut commencer à écrire  SQL Déclarations, Et la base de données l'exécute. .C'est par Statement Pour y arriver..Principalement divisé en:

  • Statement:Définir un statique SQL Déclarations, La base de données doit être recompilée à chaque exécution , Généralement utilisé dans les cas où une seule requête est effectuée et les résultats retournés .
  • PreparedStatement: Définir un précompilé avec des paramètres  SQL Déclarations,La prochaine fois, Les déclarations suivantes sont retirées du cache , Sans avoir à recompiler , Pour exécuter la même logique plusieurs fois  SQL Déclarations, Bien sûr que si.  SQL Fonctions telles que l'injection, Haute sécurité et efficacité ,Utilisation plus fréquente.Pour les essais de performance,Sélectionner PreparedStatement Le plus approprié.
  • CallableStatement: Utilisé pour invoquer une procédure stockée .

ResultSet Conception

JDBC Utiliser ResultSet Interface pour entreprendre Statement Résultats de la mise en œuvre.ResultSet La façon d'utiliser le pointeur(next()) Pour obtenir les résultats de la recherche article par article , Lorsque le pointeur pointe vers une donnée , L'utilisateur est libre d'obtenir les données d'une colonne .PTS Par ResultSet Convertir en CSV Documentation, L'utilisateur secondaire prend un  SQL Déclarations, Construction de données piézométriques complexes .

JDBC Résumé de l'architecture

D'après l'introduction ci - dessus, nous avons découvert ,JDBC  Le design est encore stratifié .

(1)Driver Et DriverManager  Est orienté vers la base de données ,Conçu un ensemble Java  Spécification d'accès aux données , Les fournisseurs de bases de données n'ont qu'à mettre en oeuvre cet ensemble de spécifications ;

(2)DataSource Et Connection  Est destiné aux développeurs d'applications , Ils s'en fichent.  JDBC  Comment interagir avec la base de données ,Par l'unité DataSource  L'interface est disponible  Connection, Toutes les opérations de données de l'utilisateur peuvent passer par ceci  Connection C'est fait.;

(3)Statement  Portant des charges spécifiques  SQL Les ordres, Les utilisateurs peuvent définir différents  Statement  Pour envoyer des instructions à la base de données ;

(4)ResultSet  Est utilisé pour transporter  SQL Résultats de l'exécution de la commande.

Jusqu'ici.,C'est fait. Charger l'entraînement -> Établir une connexion -> Exécuter les commandes -> Retour aux résultats  Tout ce processus d'interaction avec la base de données . Si vous Intégrez ce processus de façon flexible dans  PTS Test de performance, Pour résoudre les problèmes mentionnés dans la préface .

JDBC Application dans les essais de performance

Test de performance de la base de données

  • Contexte

La plupart des opérations sur la base de données passent par  HTTP、FTP  Ou d'autres accords ,Mais dans certains cas,, Il est également logique de contourner le Protocole intermédiaire pour tester directement la base de données . Par exemple, nous voulons ne pas déclencher toutes les requêtes pertinentes , Et ne tester que des choses spécifiques  high-value Performance de la requête; Vérifier les performances de la nouvelle base de données sous haute charge .2. Valider certains paramètres du pool de connexion à la base de données ,Par exemple, le nombre maximum de connexions  3.Gagner du temps et des ressources. Quand nous voulons optimiser  SQL Heure,Modifier le SQL  Les déclarations et autres opérations de base de données sont très fastidieuses ,Adoption JDBC Mesure de pression, Nous pouvons éviter les intrusions dans le Code , Concentrez - vous sur  SQL  Tuning up .

  • Étapes

1、Créer une scène.On est là. PTS Console【Centre de mesure de pression】->【Créer une scène】Création PTS Scénario barométrique;

4.png
2、Configuration du scénario.PTS Oui. MySQL、PostgreSQL  Quatre bases de données sont utilisées pour effectuer des essais de pression .Rempli par l'utilisateur JDBC URL、Nom d'utilisateur、Mot de passe et SQL  L'essai de pression peut être effectué .En même temps,PTS  Prise en charge de l'extraction  ResultSet  Données en tant que paramètres sortants ,En aval API Utiliser; Assertion de la réponse .

3、 Surveillance et rapport de mesure de la pression .PTS  Prise en charge de la liaison alicloud  RDS Surveillance des ressources en nuage, Observation pendant les essais de pression  RDS  Indicateurs de performance en temps réel .En outre,PTS  Des rapports de piézométrie clairs et complets ainsi que des registres d'échantillonnage sont également disponibles , Pour les utilisateurs à tout moment .

5.png
6.png

Structure des données piézométriques

  • Contexte

Simuler la connexion de différents utilisateurs 、 .Dans des scénarios tels que le transfert de paramètres de service de pressurisation , Une fonction paramétrique est nécessaire pour réaliser diverses opérations dynamiques dans une demande de mesure de pression .Si vous utilisez un CSV Paramètres du fichier, Est limité par la taille du fichier , Et la création manuelle prend beaucoup d'énergie .Utiliser JDBC  Pour construire des données piézométriques , Les problèmes ci - dessus peuvent être évités .

  • Étapes

1、Ajouter une source de données. Modifier dans la scène - Gestion des sources de données ,Sélectionner ajouter DB Source des données,Entrée URL、Nom d'utilisateur、Mot de passe et SQL.

7.png
2、Ajouter un paramètre. Remplissez le nom de paramètre personnalisé et l'index de colonne .

8.png
3、Vérification de la mise en service. Cliquez sur le scénario de débogage , Vous pouvez vérifier que l'ensemble de résultats extrait répond aux attentes .Et voilà., Nous pouvons utiliser les paramètres partout où nous voulons ${}Il suffit de citer.

Nettoyage des données sales des essais de pression

  • Contexte

Essai de pression pour la demande d'écriture , De grandes quantités de données sales seront générées dans la base de données . Comment nettoyer automatiquement après l'essai de pression ?

  • Étapes

PTS  Fournit des solutions aux utilisateurs .PTS  Prise en charge de l'ordonnancement logique des liens en série , C'est - à - dire la liaison frontale 、 Liens normaux et post - Liens . Ordre d'exécution du premier arrivé au dernier . Définir un lien série comme post - lien , Remplissez le nombre de cycles. .

9.png
Plus de communication, Bienvenue à la communication du Groupe pin ,PTS  Numéro du Groupe de clous AC de l'utilisateur :11774967.

En outre,PTS  Récemment, une nouvelle mise à jour de la méthode de vente , Réduction directe du prix de la version de base  50%!5W  Prix simultanés  199, Éliminer les problèmes liés à la plate - forme d'essai de pression d'auto - exploitation et d'entretien ! Plus de nouveaux utilisateurs  0.99 Version expérientielle、VPC  Version exclusive pour les essais de pression ,Bienvenue à acheter!

10.png
Copyright:Cet article est[InfoQ]Établi,Veuillez apporter le lien original pour réimprimer,remercier。 https://fra.fheadline.com/2022/174/202206231832547343.html