MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Création de données de test pour MongoDB

Introduction :cet exemple montreune ancienne méthode d'utiliser IRI RowGen pour générer et remplir des prototypes de collection volumineux ou complexes à des fins de test ou de capacité du système à l'aide de fichiers plats. Comme vous le lirez, RowGen créerait les données de test nécessaires et créerait un fichier CSV qui serait chargé dans MongoDB à l'aide de l'utilitaire d'importation Mongo.

Mise à jour 2019 :IRI propose désormais également Prise en charge de JSON et du pilote direct pour déplacer les données entre les collections MongoDB et les produits logiciels IRI compatibles SortCL comme RowGen ou FieldShield. Cela signifie que vous pouvez utiliser RowGen pour générer des fichiers JSON de test à importer dans MongoDB (un peu comme la méthode présentée ci-dessous dans cet article), ou utiliser FieldShield pour masquer les données des tables Mongo dans les cibles de test.

Notez que FieldShield et RowGen sont tous deux inclus dans la plate-forme de gestion de données IRI Voracity, qui offre quatre façons de créer des données de test.

Bien que MongoDB soit une excellente base de données NoSQL multiplateforme et orientée document, il n'existe aucun moyen pratique de générer et de remplir des prototypes de collection volumineux ou complexes pouvant être utilisés pour tester des requêtes ou planifier la capacité. Cet article explique comment créer des données de test que MongoDB peut utiliser via IRI RowGen, spécifiant les paramètres d'un fichier CSV synthétique, mais réaliste, que MongoDB peut importer pour des tests fonctionnels et de performances.

Vous devez d'abord tenir compte de la structure et du contenu des données de test pour les besoins de votre collection (table MongoDB). Consultez cet article pour des considérations de planification typiques.

Dans l'exemple, nous savons que notre collection sera composée de clients qui ont tous des noms d'utilisateur , Noms et prénoms , Adresses e-mail , et Numéros de carte de crédit .

Pour créer nos données de test, nous devons d'abord générer des fichiers d'ensemble. Un fichier d'ensemble est une liste d'une ou plusieurs valeurs délimitées par des tabulations qui peuvent déjà exister ou qui doivent être générées manuellement ou automatiquement à partir des colonnes de la base de données via l'assistant "Générer un nouveau fichier d'ensemble" dans IRI RowGen.

Génération de noms

1) Créez un script de travail de valeur de données composées (noms et prénoms combinés) nommé "CreateNamesSet.rcl" que RowGen peut exécuter pour produire un fichier d'ensemble ; appelez la sortie "User.set" car ces noms seront également utilisés comme base pour nos noms d'utilisateur.

2) Créez trois champs à générer dans Names.set :nom, séparateur de tabulation et prénom. Nommez le premier champ "LastName" et choisissez la méthode qui sélectionnera les valeurs à partir d'un fichier d'ensemble fourni par IRI appelé "names_last.set". Ajoutez la valeur littérale "\t" pour ajouter un séparateur de tabulation, puis répétez le processus utilisé pour les valeurs Nom et Prénom à l'aide de names_first.set.

3) Exécutez CreateNamesSet.rcl avec RowGen, soit sur la ligne de commande, soit à partir de l'interface graphique IRI Workbench, pour produire le fichier User.set délimité par des tabulations de noms et prénoms, qui sera utilisé dans à la fois dans la génération des noms d'utilisateur et dans la version finale du fichier de test qui alimente notre collection de prototypes.

Génération de noms d'utilisateur

Pour les noms d'utilisateur, nous allons créer un fichier d'ensemble qui utilise le fichier Users.set généré ci-dessus. Les noms d'utilisateur de cet exemple associent le nom de famille, la première initiale et un nombre généré aléatoirement entre 100 et 999.

1) Créez un nouveau script de tâche RowGen avec l'assistant de données composées, appelez-le "CreateUsernamesSet.rcl" et nommez le fichier d'ensemble de sortie "Usernames.set".

2) Créez des valeurs de nom d'utilisateur composées avec trois composants nommés Part1, Part2 et Part3.

3) Pour la partie 1, choisissez la méthode qui sélectionner les valeurs à partir (parcourez vers) le fichier User.set généré précédemment, et spécifiez "TOUS" pour le type de sélection afin de maintenir l'association entre les utilisateurs, noms d'utilisateur et adresses e-mail. Réglez la taille sur 5.

4) Pour la partie 2, répétez le processus utilisé pour la partie 1, sauf pour le type de sélection, sélectionnez "Ligne" et définissez l'index de colonne sur 2. Définissez la taille sur 1. Cela garantit que tous les noms de famille seront utilisés. dans la génération, et que la première lettre du prénom dans la même ligne est ajoutée au nom d'utilisateur.

5) Pour la partie 3, spécifiez la génération d'une valeur numérique comprise entre 100 et 999 pour suffixer un entier aléatoire à chaque nom d'utilisateur.

Lors de l'exécution de CreateUsernamesSet.rcl, nous constatons que chaque nom d'utilisateur contient les cinq premières lettres de son nom de famille, puis sa première initiale, puis un nombre aléatoire à 3 chiffres :

Génération d'e-mails

Nous allons ensuite créer un fichier d'ensemble d'e-mails qui ajoute les valeurs de nom d'utilisateur avec des noms de domaine sélectionnés au hasard. Étant donné que certains services de messagerie sont plus populaires que d'autres, nous allons également créer un système de pondération pour refléter une fréquence plus élevée de domaines Yahoo et Gmail.

1) Exécutez l'assistant de tâche "Nouvelles données de test personnalisées" de RowGen pour créer une tâche appelée "CreateEmailsSet" qui produit un fichier d'ensemble appelé "Emails.set".

2) Produisez la partie nom d'utilisateur de l'e-mail. Dans la boîte de dialogue Définition des données de test, cliquez sur Nouveau champ et renommez le premier champ Noms d'utilisateur. Double-cliquez dessus pour lancer la boîte de dialogue Generation Field et "Définir ..." son fichier Set en tant que Usernames.set. Définissez la taille sur 9 et cliquez sur OK.

3) Produisez la partie domaine de l'e-mail (qui inclut le symbole @). Dans la boîte de dialogue Champs de mise en page, cliquez sur Nouveau champ et renommez-le en "adresse" et double-cliquez dessus. Dans la boîte de dialogue Génération de champ, spécifiez un « », avec une position de 10 et une taille de 20. Dans la section Génération de données / Distribution de données ci-dessous, cliquez sur « Définir… » pour nommer une nouvelle distribution de données d'éléments « WeightedEmails ».

4) Dans l'assistant de nouvelle distribution, choisissez "Répartition pondérée des éléments" et entrez ces éléments dans les zones de rapport et de texte littéral respectivement, puis ajoutez-les à la liste.

(32 | @gmail.com), (32 | @yahoo.com), (2 | @ibm.com), (4 | @msn.com), (2 | @ymail.com), (2 | @inmail.com), (2 | @cnet.net), (2 | @chase.org), (1 | @iri.com), (1 | @gdic.com), (1 | @aci.com), (2 | @oracle.net), (1 | @gmx.org), (4 | @aol.com), (2 | @inbox.com), (2 | @hushmail.com), (2 | @outlook.com), (2 | @zoho.com), (2 | @yandex.net), (2 | @mail.com)

Après avoir saisi ces valeurs, cliquez sur Suivant dans l'assistant d'origine pour accéder à la boîte de dialogue Cibles de données. Utilisez « Ajouter une cible de données… » pour spécifier le fichier de sortie « Email.set ». Cela sera également utilisé au moment de la construction de la collection.

Les e-mails pour lesquels nous avons défini les pondérations les plus élevées (gmail et yahoo) s'affichent le plus fréquemment, les autres s'affichant périodiquement.

Génération de numéros de carte de crédit

Enfin, nous allons créer des numéros de carte calculables au format XXXX-XXXX-XXXX-XXXX. Les quatre premiers chiffres correspondent aux numéros d'identification d'émission (IIN) réels des différentes sociétés de cartes de crédit, et le dernier chiffre vérifie l'authenticité des cartes.

Pour ce faire, créez et exécutez une nouvelle tâche (vide). Appelez-le "CreateCCNSet.rcl" (ou .scl) et remplissez-le avec le script ci-dessous pour créer "CCN.set". La valeur /INCOLLECT dans les scripts RowGen détermine le nombre de lignes générées.

La fonction de génération CCN spécialement conçue par RowGen, ccn_gen(“ANY, “-“) est appelée pour remplir ce champ. Notez que des fonctions similaires existent pour les numéros de sécurité sociale américains et coréens, ainsi que pour les cartes d'identité nationales italiennes et néerlandaises.

Création du fichier de test final

Avec tous les fichiers définis, il est temps de les utiliser dans le fichier CSV de test que nous allons créer et exporter vers une collection MongoDB.

1) Exécutez l'assistant de tâche "Nouvelles données de test personnalisées" de RowGen pour créer une tâche appelée "CreateMongoUserData.rcl" qui générera le fichier Customers.csv, le fichier que nous exporterons ensuite vers MongoDB.

2) Cliquez sur "Champs de mise en page…" pour accéder à la boîte de dialogue Champs de mise en page. Cliquez sur Nouveau champ et renommez le premier champ en Noms d'utilisateur. Double-cliquez dessus pour lancer la boîte de dialogue Generation Field et "Définir ..." son fichier Set en tant que Usernames.set; puis sélectionnez TOUS pour son type de sélection.

3) Cliquez sur Nouveau champ et renommez le deuxième champ en Noms de famille. Double-cliquez dessus pour lancer la boîte de dialogue Generation Field et "Définir ..." son fichier Set en tant que Users.set; puis sélectionnez TOUS pour son type de sélection.

4) Cliquez sur Nouveau champ et renommez le troisième champ en Prénoms. Double-cliquez dessus pour lancer la boîte de dialogue Generation Field et "Définir ..." son fichier Set en tant que Users.set; puis sélectionnez ROWS pour son type de sélection et définissez l'index de colonne sur 2.

5) Cliquez sur Nouveau champ et renommez le quatrième champ en E-mail. Double-cliquez dessus pour lancer la boîte de dialogue Génération de champs et "Définir..." son fichier Set en tant que Emails.set ; puis sélectionnez TOUS pour son type de sélection.

6) Cliquez sur Nouveau champ et renommez le cinquième champ en CreditCardNumbers. Double-cliquez dessus pour lancer la boîte de dialogue Generation Field et "Définir ..." son fichier Set en tant que CCN.set ; puis sélectionnez TOUS pour son type de sélection.

7) Après avoir saisi ces valeurs, cliquez sur Suivant dans l'assistant d'origine pour accéder à la boîte de dialogue Cibles de données. Utilisez « Ajouter une cible de données… » pour spécifier le fichier de sortie Customers.csv ; puis exécutez le script dans le Workbench ou sur la ligne de commande pour générer ce fichier :

rowgen /spec=CreateMongoUserData.rcl

Notez que RowGen, en plus de produire ce fichier CSV au moment de l'exécution, aurait également pu produire plusieurs autres fichiers, bases de données, rapports formatés, canaux nommés, procéduraux et même affichage BIRT en temps réel , avec des champs provenant des données de test générées, le tout en même temps.

Importation vers MongoDB

Pour importer le fichier CSV dans votre base de données Mongo, appelez l'utilitaire "mongoimport" et exécutez la commande suivante :

--db <Database Name> --collection <Collection Name> --type csv --fields <fieldname1,fieldname2,...> --file <File path to the CSV file to import>

Voici les enregistrements de la collection de test (affichés avec MongoVUE), que MongoDB indexera automatiquement avec les valeurs d'ID générées pour chaque entrée :

MongoDB attribue une valeur d'ID unique à chaque entrée de collection.

Vous pouvez également charger des données de test directement dans la base de données Mongo à l'aide du pilote DataDirect ODBC de Progress Software pour MongoDB. Avant d'exécuter le travail RowGen dans le Workbench, j'avais une collection vide appelée CUSTOMERS_CNN dans MYDB pour recevoir les données.

J'ai d'abord exécuté le travail en utilisant stdout, pour prévisualiser mes données de test dans la fenêtre de la console :

Après avoir exécuté le script dans le Workbench, je peux maintenant voir mes données à l'aide de l'explorateur de sources de données et du pilote DataDirect JDBC.

Pour plus d'informations sur les options de génération disponibles, consultez les Test File Targets section : http://www.iri.com/products/rowgen/technical-details.