2013-02-11 7 views
1

Voici mon scénario:Comment tester les performances de l'application SGBD java

J'ai une application java qui lit les données à partir d'une table T1 de base de données D1, traite et il met dans une autre table T2 d'une autre base de données D2. Cela se produit en temps réel, c'est-à-dire au fur et à mesure qu'un enregistrement est inséré ou mis à jour dans la table T1, l'application sélectionne les données, les traite et les pousse vers la table de destination. Je souhaite surveiller les performances de cette application en utilisant un framework de test (de préférence JUnit) et/ou de performance. Dans mon cas de test, je souhaite avoir

  • Insérer et mettre à jour un nombre fixe d'enregistrements pour un temps fixe à intervalles fixes dans la table T1 de la base de données D1.
  • Après un temps fixe, vérifiez le nombre d'enregistrements présents dans T2 de la base de données D2 ou recherchez l'existence d'un enregistrement spécifique.

Les tests que je souhaite créer devrait être

  • Base de données agnostique
  • fournir des résultats qui peuvent montrer les tendances et être configurable avec un outil de CI comme Jenkins

Alors, mon question est, quelle est la meilleure façon de tester ce genre de scénario? Existe-t-il des outils disponibles qui m'aideront à atteindre cet objectif?

+0

Ce n'est pas une application en temps réel, à moins qu'il fonctionne sur une version en temps réel de Java, en cours d'exécution sur un système d'exploitation en temps réel. Ne pas abuser de la terminologie CS standard. – EJP

+0

@EJP: Je ne suis pas très sûr de ce que vous vouliez dire, mais j'avais l'impression qu'une application temps réel est une application qui est soumise à des contraintes de temps. Les données doivent être déplacées d'une base de données à une autre en temps réel. Est-ce que mon hypothèse est fausse? –

+0

@ShivaKumar, dosez-vous DB garantie une réponse dans les contraintes de temps strictes? Pensez-vous qu'il est possible de construire un système en temps réel au sommet de n'importe quelle solution? –

Répondre

1

Base de données agnostique

Pour y parvenir, je vous suggère d'utiliser la plus simple SQL possible et une couche d'abstraction JDBC bas niveau:

DBUtils

La bibliothèque Commons dbUtils est un petit ensemble de classes conçues pour faciliter le travail avec JDBC. JDBC code de nettoyage des ressources est banal, l'erreur travail prédisposé donc ces classes abstraites toutes les tâches de nettoyage de votre code vous laissant avec ce que vous vouliez vraiment faire avec JDBC en la première place: requête et mise à jour des données.

MyBatis

mybatis est un premier cadre de la persistance de la classe avec prise en charge personnalisée SQL, des procédures stockées et applications avancées. MyBatis élimine presque tout le code JDBC et le réglage manuel des paramètres et la récupération des résultats. MyBatis peut utiliser des XML simples ou des annotations pour les primitives de configuration et de mappage , les interfaces de carte et les POJO Java (Objets Java anciens) vers les enregistrements de base de données.

Les deux feront l'affaire pour vous. Avec une bonne attention aux détails, vous parviendrez à fournir une solution suffisamment flexible et à tester autant de bases de données que vous le souhaitez.

donnent des résultats qui peuvent montrer les tendances et être configurable avec un outil de CI comme Jenkins

définir plusieurs KPIs et assurez-vous que vous pouvez obtenir toutes les valeurs périodiquement. Par exemple, vous pouvez mesurer un débit (enregistrements par seconde). Exporter des données périodiquement (au format CSV ou propriétés par exemple) et utiliser PlotPlugin pour la visualisation:

enter image description here

Vous pouvez également consulter question pertinente: How do I plot benchmark data in a Jenkins matrix project

tests appropriés

S'il vous plaît assurez-vous que votre la stratégie de test est bien définie et vous ne manquerez de rien:

  1. Load testing
  2. Stress testing
Questions connexes