sql >> Database teknologi >  >> NoSQL >> MongoDB

Oprettelse af testdata til MongoDB

Introduktion:Dette eksempel viseren ældre metode at bruge IRI RowGen til at generere og udfylde store eller komplekse samlingsprototyper til test eller systemkapacitet ved hjælp af flade filer. Som du vil læse, ville RowGen oprette de nødvendige testdata og oprette en CSV-fil, der ville blive indlæst i MongoDB ved hjælp af Mongo Import Utility.

2019-opdatering:IRI tilbyder nu også JSON og direkte driversupport til at flytte data mellem MongoDB-samlinger og SortCL-kompatible IRI-softwareprodukter som RowGen eller FieldShield. Dette betyder, at du kan bruge RowGen til at generere test-JSON-filer til import i MongoDB (ikke ulig metoden vist nedenfor i denne artikel), eller bruge FieldShield til at maskere data i Mongo-tabeller til testmål.

Bemærk, at både FieldShield og RowGen er inkluderet i IRI Voracity-dataadministrationsplatformen, som tilbyder fire måder at oprette testdata på.

Selvom MongoDB er en fin dokumentorienteret NoSQL-database på tværs af platforme, har den ingen praktisk måde at generere og udfylde store eller komplekse samlingsprototyper, der kan bruges til at teste forespørgsler eller planlægge kapacitet. Denne artikel forklarer, hvordan man opretter testdata, som MongoDB kan bruge via IRI RowGen, ved at specificere parametrene for en syntetisk, men realistisk, CSV-fil, som MongoDB kan importere til funktions- og ydeevnetest.

Du skal først overveje strukturen og indholdet af testdataene til din samling (MongoDB-tabel) behov. Se denne artikel for typiske planlægningsovervejelser.

I eksemplet ved vi, at vores samling vil bestå af kunder, der alle har brugernavne , For- og efternavne , E-mail-adresser og Kreditkortnumre .

For at oprette vores testdata skal vi først generere nogle sæt filer. En sætfil er en liste over en eller flere tabulatorafgrænsede værdier, som muligvis allerede eksisterer, eller som skal genereres manuelt eller automatisk fra databasekolonner gennem guiden 'Generer ny sætfil' i IRI RowGen.

Generering af navne

1) Opret en sammensat dataværdi (for- og efternavne kombineret) jobscript ved navn "CreateNamesSet.rcl", som RowGen kan udføre for at producere en sætfil; kald outputtet "User.set", fordi disse navne også vil blive brugt som grundlag for vores brugernavne.

2) Opret tre felter, der skal genereres i Names.set:efternavn, tabulatorseparator og fornavn. Navngiv det første felt "LastName", og vælg den metode, der vil vælge værdier fra en IRI-leveret sætfil kaldet "names_last.set". Tilføj den bogstavelige værdi "\t" for at tilføje en tabulatorseparator, og gentag derefter den proces, der blev brugt til efternavn og fornavn ved hjælp af names_first.set.

3) Kør CreateNamesSet.rcl med RowGen, enten på kommandolinjen eller fra IRI Workbench GUI, for at producere den tabulator-separerede User.set-fil med for- og efternavne, som vil blive brugt i både genereringen af ​​brugernavne og i den endelige testfil-build, der udfylder vores prototypesamling.

Generering af brugernavne

For brugernavne opretter vi en sætfil, der bruger den Users.set-fil, der er genereret ovenfor. Brugernavne til dette eksempel vil kombinere efternavn, forbogstav og et tilfældigt genereret tal mellem 100 og 999.

1) Opret et nyt RowGen-jobscript med Compound Data Wizard, kald det "CreateUsernamesSet.rcl", og navngiv outputsætfilen "Usernames.set".

2) Byg sammensatte brugernavneværdier med tre komponenter med navnet Part1, Part2 og Part3.

3) For del 1 skal du vælge den metode, der vil vælge værdier fra (gennemse til) den tidligere genererede User.set-fil, og angive "ALLE" for valgtypen for at opretholde tilknytningen mellem brugere, brugernavne og e-mailadresser. Indstil størrelsen til 5.

4) For del 2 gentages processen, der blev brugt til del 1, bortset fra valgtype, vælg 'Række' og indstil kolonneindeks til 2.  Indstil størrelsen til 1. Dette garanterer, at alle efternavne vil blive brugt i generationen, og at det første bogstav i fornavnet i samme række er tilføjet brugernavnet.

5) For del 3 skal du angive genereringen af ​​en numerisk værdi mellem 100 og 999 for at suffikse et tilfældigt heltal med hvert brugernavn.

Ved udførelse af CreateUsernamesSet.rcl ser vi, at hvert brugernavn indeholder de første fem bogstaver i deres efternavn, derefter deres første initial og derefter et tilfældigt 3-cifret tal:

Generering af e-mails

Derefter opretter vi en e-mail-sætfil, der tilføjer brugernavnsværdierne med tilfældigt udvalgte domænenavne. Da nogle e-mailtjenester er mere populære end andre, vil vi også oprette et vægtningssystem, der afspejler en højere frekvens af yahoo- og gmail-domæner.

1) Kør RowGens 'New Custom Test Data' job-guide for at oprette et job kaldet "CreateEmailsSet", der producerer en sæt fil kaldet "Emails.set".

2) Fremstil brugernavndelen af ​​e-mailen. Klik på Nyt felt i dialogboksen Testdatadefinition, og omdøb det første felt Brugernavne. Dobbeltklik på den for at starte dialogboksen Generation Field og "Definer ..." dens Set-fil som Usernames.set. Indstil størrelsen til 9, og klik på OK.

3) Fremstil domænedelen af ​​e-mailen (som inkluderer @-symbolet). I dialogboksen Layoutfelter skal du klikke på Nyt felt og omdøbe det til "adresse" og dobbeltklikke på det. I dialogboksen Generationsfelt skal du angive en " ," med en position på 10 og en størrelse på 20. I afsnittet Datagenerering/Datadistribution nedenfor, klik på "Definer ..." for at navngive en ny datadistribution af elementer "WeightedEmails".

4) I guiden Ny distribution skal du vælge "Vægtet fordeling af varer" og indtaste disse elementer i henholdsvis forholds- og bogstavtekstfelterne, og derefter tilføje hver til listen.

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

Når du har indtastet disse værdier, skal du klikke på Næste i den originale guide for at gå ind i dialogboksen Datamål. Brug "Tilføj datamål ..." til at angive outputfilen "Email.set". Dette vil også blive brugt på tidspunktet for opbygning af samling.

E-mailen, vi har angivet de højeste vægte for (gmail og yahoo), vises oftest, mens andre dukker op med jævne mellemrum.

Generering af kreditkortnumre

Til sidst vil vi oprette beregningsgyldige kortnumre i formatet XXXX-XXXX-XXXX-XXXX. De første fire cifre afspejler faktiske Issue Identifier Numbers (IIN) for forskellige kreditkortselskaber, og det sidste ciffer bekræfter kortenes ægthed.

For at gøre dette skal du oprette og køre et nyt (tomt) job. Kald det "CreateCCNSet.rcl" (eller .scl), og udfyld det med scriptet nedenfor for at oprette "CCN.set". /INCOLLECT-værdien i RowGen-scripts bestemmer antallet af genererede rækker.

RowGens specialbyggede CCN-genereringsfunktion, ccn_gen(“ANY, “-“) kaldes for at udfylde dette felt. Bemærk, at lignende funktioner findes for amerikanske og koreanske personnumre og de nationale id'er for Italien og Holland.

Oprettelse af den endelige testfil

Med alle sæt-filer bygget, er det tid til at bruge dem i den test-CSV-fil, vi vil oprette og eksportere til en MongoDB-samling.

1) Kør RowGens 'New Custom Test Data' job-guide for at oprette et job kaldet "CreateMongoUserData.rcl", der genererer Customers.csv-filen, den fil vi derefter eksporterer til MongoDB.

2) Klik på "Layoutfelter ..." for at åbne dialogboksen Layoutfelter. Klik på Nyt felt, og omdøb det første felt til Brugernavne. Dobbeltklik på den for at starte dialogboksen Generation Field og "Definer ..." dens Set-fil som Usernames.set; vælg derefter ALLE for dens valgtype.

3) Klik på Nyt felt, og omdøb det andet felt til Efternavne. Dobbeltklik på den for at starte dialogboksen Generation Field og "Definer ..." dens Set-fil som Users.set; vælg derefter ALLE for dens valgtype.

4) Klik på Nyt felt, og omdøb det tredje felt til Fornavne. Dobbeltklik på den for at starte dialogboksen Generation Field og "Definer ..." dens Set-fil som Users.set; vælg derefter ROWS for dens valgtype, og indstil kolonneindekset til 2.

5) Klik på Nyt felt, og omdøb det fjerde felt til E-mail. Dobbeltklik på den for at starte dialogboksen Generation Field og "Definer ..." dens Set-fil som Emails.set; vælg derefter ALLE for dens valgtype.

6) Klik på Nyt felt, og omdøb det femte felt til CreditCardNumbers. Dobbeltklik på den for at starte dialogboksen Generation Field og “Definer …” dens Set-fil som CCN.set; vælg derefter ALLE for dens valgtype.

7) Når du har indtastet disse værdier, skal du klikke på Næste i den originale guide for at gå ind i dialogen Datamål. Brug "Tilføj datamål ..." til at angive outputfilen Customers.csv; kør derefter scriptet i Workbench eller på kommandolinjen for at generere denne fil:

rowgen /spec=CreateMongoUserData.rcl

Bemærk, at RowGen, udover at producere denne CSV-fil under kørsel, også kunne have produceret flere, andre filer, databaser, formaterede rapporter, named-pipe, procedurer og endda BIRT-visning i realtid , med felter fra de genererede testdata, alt sammen på samme tid.

Importerer til MongoDB

For at importere CSV-filen til din Mongo-database skal du kalde 'mongoimport-værktøjet' og køre følgende kommando:

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

Her er posterne i testsamlingen (vist med MongoVUE), som MongoDB automatisk vil indeksere med genererede ID-værdier for hver post:

MongoDB tildeler en unik ID-værdi til hver samlingspost.

Du kan også indlæse testdata direkte i Mongo-databasen ved hjælp af Progress Softwares DataDirect ODBC-driver til MongoDB. Før jeg kørte RowGen-jobbet i Workbench, havde jeg en tom samling kaldet CUSTOMERS_CNN i MYDB for at modtage dataene.

Jeg kørte jobbet først ved hjælp af stdout for at få vist mine testdata i konsolvinduet:

Efter at have udført scriptet i Workbench, kan jeg nu se mine data ved hjælp af Data Source Explorer og DataDirect JDBC-driveren.

Se Testfilmål for at få flere oplysninger om de tilgængelige genereringsmuligheder sektion på: http://www.iri.com/products/rowgen/technical-details.


  1. Forsøger at løse afhængigheder:Ændring af .NET Standard Library til NET Core - Microsoft.Extensions.Primitives

  2. tælle antal sessioner i connect-redis

  3. Få et bestemt element fra mongoDB-array

  4. Hvad er det næste for Impala efter udgivelse 1.1