MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Erstellen von Testdaten für MongoDB

Einführung:Dieses Beispiel demonstrierteine ältere Methode der Verwendung von IRI RowGen zum Generieren und Füllen großer oder komplexer Sammlungsprototypen zum Testen oder zur Systemkapazität unter Verwendung von Flatfiles. Wie Sie lesen werden, würde RowGen die erforderlichen Testdaten erstellen und eine CSV-Datei erstellen, die mit dem Mongo Import Utility in MongoDB geladen würde.

Update 2019:IRI bietet jetzt auch JSON und direkte Treiberunterstützung zum Verschieben von Daten zwischen MongoDB-Sammlungen und SortCL-kompatiblen IRI-Softwareprodukten wie RowGen oder FieldShield. Das bedeutet, dass Sie RowGen verwenden können, um Test-JSON-Dateien für den Import in MongoDB zu generieren (ähnlich der unten in diesem Artikel gezeigten Methode), oder FieldShield verwenden können, um Daten in Mongo-Tabellen in Testziele zu maskieren.

Beachten Sie, dass sowohl FieldShield als auch RowGen in der Datenverwaltungsplattform IRI Voracity enthalten sind, die vier Möglichkeiten zum Erstellen von Testdaten bietet.

Obwohl MongoDB eine gute plattformübergreifende, dokumentenorientierte NoSQL-Datenbank ist, bietet sie keine bequeme Möglichkeit, große oder komplexe Sammlungsprototypen zu generieren und zu füllen, die zum Testen von Abfragen oder zum Planen von Kapazität verwendet werden können. In diesem Artikel wird erläutert, wie Sie Testdaten erstellen, die MongoDB über IRI RowGen verwenden kann, und die Parameter für eine synthetische, aber realistische CSV-Datei angeben, die MongoDB für Funktions- und Leistungstests importieren kann.

Sie müssen zuerst die Struktur und den Inhalt der Testdaten für Ihre Anforderungen an die Sammlung (MongoDB-Tabelle) berücksichtigen. In diesem Artikel finden Sie typische Planungsüberlegungen.

In diesem Beispiel wissen wir, dass unsere Sammlung aus Kunden besteht, die alle Nutzernamen haben , Vor- und Nachname , E-Mail-Adressen und Kreditkartennummern .

Um unsere Testdaten zu erstellen, müssen wir zunächst einige Set-Dateien generieren. Eine Satzdatei ist eine Liste mit einem oder mehreren tabulatorgetrennten Werten, die möglicherweise bereits vorhanden sind oder manuell oder automatisch aus Datenbankspalten über den Assistenten „Neue Satzdatei erstellen“ in IRI RowGen generiert werden müssen.

Namen generieren

1) Erstellen Sie ein Auftragsskript für zusammengesetzte Datenwerte (Vor- und Nachname kombiniert) mit dem Namen „CreateNamesSet.rcl“, das RowGen ausführen kann, um eine Satzdatei zu erstellen; Nennen Sie die Ausgabe „User.set“, da diese Namen auch als Grundlage für unsere Nutzernamen verwendet werden.

2) Erstellen Sie drei Felder, die in Names.set generiert werden sollen:Nachname, Tabulatortrennzeichen und Vorname. Benennen Sie das erste Feld „LastName“ und wählen Sie die Methode aus, die Werte aus einer von IRI bereitgestellten Set-Datei mit dem Namen „names_last.set“ auswählt. Fügen Sie den Literalwert „\t“ hinzu, um ein Tabulatortrennzeichen hinzuzufügen, und wiederholen Sie dann den Vorgang, der für LastName- und FirstName-Werte verwendet wird, mit names_first.set.

3) Führen Sie CreateNamesSet.rcl mit RowGen aus, entweder über die Befehlszeile oder über die IRI Workbench-GUI, um die tabulatorgetrennte User.set-Datei mit Vor- und Nachnamen zu erstellen, die verwendet wird sowohl bei der Generierung von Benutzernamen als auch im endgültigen Testdateiaufbau, der unsere Prototypsammlung füllt.

Nutzernamen generieren

Für Nutzernamen erstellen wir eine Set-Datei, die die oben generierte Users.set-Datei verwendet. Nutzernamen für dieses Beispiel bestehen aus dem Nachnamen, dem Anfangsbuchstaben des Vornamens und einer zufällig generierten Zahl zwischen 100 und 999.

1) Erstellen Sie mit dem Compound Data Wizard ein neues RowGen-Jobskript, nennen Sie es „CreateUsernamesSet.rcl“ und benennen Sie die Ausgabesatzdatei „Usernames.set“.

2) Erstellen Sie zusammengesetzte Nutzernamenswerte mit drei Komponenten namens Teil 1, Teil 2 und Teil 3.

3) Wählen Sie für Teil 1 die Methode aus, mit der Werte aus der zuvor generierten User.set-Datei ausgewählt (durchsucht) werden, und geben Sie "ALL" als Auswahltyp an, um die Zuordnung zwischen Benutzern aufrechtzuerhalten. Benutzernamen und E-Mail-Adressen. Stellen Sie die Größe auf 5 ein.

4) Wiederholen Sie für Teil 2 den für Teil 1 verwendeten Vorgang, mit Ausnahme des Auswahltyps, wählen Sie „Zeile“ aus und setzen Sie den Spaltenindex auf 2. Stellen Sie die Größe auf 1 ein. Dadurch wird sichergestellt, dass alle Nachnamen verwendet werden in der Generierung, und dass der Anfangsbuchstabe des Vornamens in derselben Zeile an den Benutzernamen angehängt wird.

5) Geben Sie für Teil 3 die Generierung eines numerischen Werts zwischen 100 und 999 an, um jedem Nutzernamen eine zufällige ganze Zahl anzuhängen.

Bei der Ausführung von CreateUsernamesSet.rcl sehen wir, dass jeder Nutzername die ersten fünf Buchstaben seines Nachnamens enthält, dann seinen ersten Anfangsbuchstaben und dann eine dreistellige Zufallszahl:

E-Mails generieren

Als Nächstes erstellen wir eine E-Mail-Set-Datei, die die Nutzernamenswerte mit zufällig ausgewählten Domainnamen anhängt. Da einige E-Mail-Dienste beliebter sind als andere, werden wir auch ein Gewichtungssystem erstellen, um eine höhere Häufigkeit von Yahoo- und Gmail-Domains widerzuspiegeln.

1) Führen Sie den Job-Assistenten „Neue benutzerdefinierte Testdaten“ von RowGen aus, um einen Job namens „CreateEmailsSet“ zu erstellen, der eine Satzdatei namens „Emails.set“ erzeugt.

2) Erstellen Sie den Benutzernamensteil der E-Mail. Klicken Sie im Dialogfeld „Testdatendefinition“ auf „Neues Feld“ und benennen Sie das erste Feld in „Benutzernamen“ um. Doppelklicken Sie darauf, um das Dialogfeld "Generierungsfeld" zu starten, und "definieren Sie ..." seine Set-Datei als Usernames.set. Stellen Sie die Größe auf 9 ein und klicken Sie auf OK.

3) Erstellen Sie den Domänenteil der E-Mail (der das @-Symbol enthält). Klicken Sie im Dialogfeld „Layoutfelder“ auf „Neues Feld“, benennen Sie es in „Adresse“ um und doppelklicken Sie darauf. Geben Sie im Dialogfeld Generierungsfeld ein „ “ mit einer Position von 10 und einer Größe von 20 an. Klicken Sie im Abschnitt Datengenerierung / Datenverteilung unten auf „Definieren …“, um eine neue Datenverteilung von Elementen „WeightedEmails“ zu nennen.

4) Wählen Sie im Assistenten für neue Verteilungen die Option „Gewichtete Verteilung von Elementen“ und geben Sie diese Elemente in die Textfelder „Verhältnis“ bzw. „Literal“ ein und fügen Sie sie dann jeweils der Liste hinzu.

(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)

Nachdem Sie diese Werte eingegeben haben, klicken Sie im ursprünglichen Assistenten auf „Weiter“, um zum Dialogfeld „Datenziele“ zu gelangen. Über „Datenziel hinzufügen …“ legen Sie die Ausgabedatei „Email.set“ fest. Dies wird auch beim Erstellen der Sammlung verwendet.

Die E-Mail-Adressen, für die wir die höchste Gewichtung festgelegt haben (Google Mail und Yahoo), werden am häufigsten angezeigt, während andere regelmäßig angezeigt werden.

Generieren von Kreditkartennummern

Zuletzt erstellen wir rechnerisch gültige Kartennummern im Format XXXX-XXXX-XXXX-XXXX. Die ersten vier Ziffern spiegeln die tatsächlichen Issue Identifier Numbers (IIN) verschiedener Kreditkartenunternehmen wider und die letzte Ziffer bestätigt die Echtheit der Karten.

Erstellen Sie dazu einen neuen (leeren) Job und führen Sie ihn aus. Nennen Sie es „CreateCCNSet.rcl“ (oder .scl) und füllen Sie es mit dem folgenden Skript, um „CCN.set“ zu erstellen. Der /INCOLLECT-Wert in RowGen-Skripten bestimmt die Anzahl der generierten Zeilen.

Die speziell entwickelte CCN-Generierungsfunktion von RowGen, ccn_gen("ANY, "-"), wird aufgerufen, um dieses Feld auszufüllen. Beachten Sie, dass ähnliche Funktionen für US-amerikanische und koreanische Sozialversicherungsnummern sowie die Personalausweise von Italien und den Niederlanden existieren.

Erstellen der endgültigen Testdatei

Nachdem alle Set-Dateien erstellt wurden, ist es an der Zeit, sie in der Test-CSV-Datei zu verwenden, die wir erstellen und in eine MongoDB-Sammlung exportieren.

1) Führen Sie den Job-Assistenten „Neue benutzerdefinierte Testdaten“ von RowGen aus, um einen Job namens „CreateMongoUserData.rcl“ zu erstellen, der die Customers.csv-Datei generiert, die Datei, die wir dann nach MongoDB exportieren.

1) P>

2) Klicken Sie auf „Layoutfelder …“, um das Dialogfeld „Layoutfelder“ aufzurufen. Klicken Sie auf Neues Feld und benennen Sie das erste Feld in Benutzernamen um. Doppelklicken Sie darauf, um das Dialogfeld "Generierungsfeld" zu starten, und "definieren Sie ..." seine Set-Datei als Usernames.set; Wählen Sie dann ALLE als Auswahltyp aus.

3) Klicken Sie auf „Neues Feld“ und benennen Sie das zweite Feld in „Nachnamen“ um. Doppelklicken Sie darauf, um das Dialogfeld "Generierungsfeld" zu starten, und "definieren Sie ..." seine Set-Datei als Users.set; Wählen Sie dann ALLE als Auswahltyp aus.

4) Klicken Sie auf „Neues Feld“ und benennen Sie das dritte Feld in „Vornamen“ um. Doppelklicken Sie darauf, um das Dialogfeld "Generierungsfeld" zu starten, und "definieren Sie ..." seine Set-Datei als Users.set; Wählen Sie dann ROWS als Auswahltyp aus und setzen Sie den Spaltenindex auf 2.

5) Klicken Sie auf „Neues Feld“ und benennen Sie das vierte Feld in „E-Mail“ um. Doppelklicken Sie darauf, um das Dialogfeld "Generierungsfeld" zu starten, und "definieren Sie ..." seine Set-Datei als Emails.set; Wählen Sie dann ALLE als Auswahltyp aus.

6) Klicken Sie auf „Neues Feld“ und benennen Sie das fünfte Feld in „CreditCardNumbers“ um. Doppelklicken Sie darauf, um das Dialogfeld "Generierungsfeld" zu starten, und "definieren Sie ..." seine Set-Datei als CCN.set; Wählen Sie dann ALLE als Auswahltyp aus.

7) Nachdem Sie diese Werte eingegeben haben, klicken Sie im ursprünglichen Assistenten auf "Weiter", um zum Dialogfeld "Datenziele" zu gelangen. Verwenden Sie „Datenziel hinzufügen …“, um die Ausgabedatei Customers.csv anzugeben; Führen Sie dann das Skript in der Workbench oder in der Befehlszeile aus, um diese Datei zu generieren:

rowgen /spec=CreateMongoUserData.rcl

Beachten Sie, dass RowGen zusätzlich zur Erstellung dieser CSV-Datei zur Laufzeit auch mehrere andere Dateien, Datenbanken, formatierte Berichte, benannte Pipes, prozedurale und sogar Echtzeit-BIRT-Anzeigen hätte erstellen können , mit Feldern aus den generierten Testdaten, alles gleichzeitig.

In MongoDB importieren

Um die CSV-Datei in Ihre Mongo-Datenbank zu importieren, rufen Sie das Dienstprogramm „mongoimport“ auf und führen Sie den folgenden Befehl aus:

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

Hier sind die Datensätze in der Testsammlung (gezeigt mit MongoVUE), die MongoDB automatisch mit generierten ID-Werten für jeden Eintrag indiziert:

MongoDB weist jedem Sammlungseintrag einen eindeutigen ID-Wert zu.

Sie können Testdaten auch direkt in die Mongo-Datenbank laden, indem Sie den DataDirect ODBC-Treiber von Progress Software für MongoDB verwenden. Bevor ich den RowGen-Job in der Workbench ausführte, hatte ich eine leere Sammlung namens CUSTOMERS_CNN in MYDB, um die Daten zu empfangen.

Ich habe den Job zuerst mit stdout ausgeführt, um eine Vorschau meiner Testdaten im Konsolenfenster anzuzeigen:

Nachdem ich das Skript in der Workbench ausgeführt habe, kann ich jetzt meine Daten mit dem Datenquellen-Explorer und dem DataDirect-JDBC-Treiber anzeigen.

Weitere Informationen zu den verfügbaren Generierungsoptionen finden Sie unter Testdateiziele Abschnitt unter: http://www.iri.com/products/rowgen/technical-details.