2015-06-02 6 views
5

Wir haben ein Projekt, in dem wir eine gefälschte Datenbank erstellen und gefälschte Daten für Funktionstests erstellen müssen. Am Anfang haben wir mit einem Skript begonnen, das die Entitäten mit Hilfe von Mungos erstellt, initialisiert und speichert.Einrichten von gefälschten Daten in Mongodb zum Testen

var StudentA = new Student(); 
StudentA.name = "Bob"; 
StudentA.surname = "Marley"; 
StudentA.save(); 

Als die Anwendung wuchs und die Beziehungen zwischen den Dokumenten stieg, ist dieses Skript ein absolutes Durcheinander geworden. Jetzt ist es ein Engpass in Bezug auf die Zeit, die wir in die Anwendungsentwicklung investieren.

Die Frage ist, gibt es einen besseren Weg, es zu tun? z.B. eine Bibliothek, die die Datenbank strukturierter mit Daten füllt? Oder sollten wir eine Datei wie eine CSV-Datei analysieren und dann zum Mongo schieben?

Die Frage ist für mongodb, aber es kann in jede Art von NO-SQL-Datenbank verallgemeinert werden, die mit gefälschten Daten gefüllt werden muss. (Es ist einfacher mit einer SQL-ähnlichen Grammatik für RDBMS)

Antwort

5

Sie könnten versuchen, Json-Dateien anstelle von Code zu schreiben und mongoimport verwenden, um Ihre Datenbank neu zu erstellen. Das ist einfacher zu pflegen als Kilometer von sehr ausführlichen und sich wiederholenden Code.

+0

, die robust genug klingt. Gibt es eine einfache Möglichkeit, die Beziehungen von Dokumenten in diesem Ansatz zu verwalten? Beispielsweise hat jeder Schüler eine Schul-ID als ein Feld. In meinem Skript behandelt Mungo diese ID-Erstellungsphase (einfach beim Erstellen des Objekts) - muss ich bei diesem Ansatz Ids manuell an die Schulen setzen und sie im json-Dokument verlinken? – ralzaul

+0

Ja, Sie müssten die Beziehungen manuell pflegen. Denken Sie daran, dass eine '_id' keine ObjectId sein muss. Es kann alles sein, solange es einzigartig ist. Also 'school.json' könnte enthalten:' {_id: 1, name: "Foo"} 'und' student.json' könnte '{_id:" student_1 ", school_id: 1, name:" John "}' enthalten . Denken Sie daran, das Dokument einzubetten, anstatt "SQL-ähnliche Verknüpfungen" zu erstellen. –

+0

Außerdem würde ich verschiedene (kleine) JSON-Dateien verwenden, um sicherzustellen, dass alle meine Tests unabhängig bleiben, um riesige Datensätze zu vermeiden. –

2

Download Diese JSON-Datei wird von MongoDB bereitgestellt.

Sie können es mit mongoimport:

mongoimport --db testDB --collection testCollection --file test.json 

Weitere Details zu Mongoimport here gefunden werden kann.

+1

danke, aber ich würde lieber mein eigenes Datenmodell verwenden. Es sollten keine zufälligen Daten sein, sondern zufällige Daten in meinem Datenmodell. – ralzaul

4

ich mit den oben genannten Lösungen einverstanden und denke, der beste Weg ist, um:

  1. gefälschte Informationen generieren Bibliothek Tool.
  2. Konvertieren Sie die gefälschten Informationen in eine JSON-Datei.
  3. Laden Sie es auf Mongo mit Mongoimport.

I OUND gibt es Bibliotheken gibt, die Sie kostenlos gefälschte Daten tun generieren können wie Faker.js (wenn Sie mit node.js und js allgemein bekannt sind) oder Sie können die kostenlose Java-Version verwenden von Faker hier: https://github.com/blocoio/faker

Ich fand auch eine kostenpflichtige Lösung hier: https://www.mockaroo.com/ aber weiß nicht, warum jemand dafür bezahlen möchte, da es ziemlich einfach ist, die gefälschten Daten zu erzeugen - hier ist eine Schritt für Schritt Anleitung.

Import der Fälscher Java-Bibliothek und die json Schriftsteller in Ihr Projekt (ich verwende gradle so ist hier die gradle Code):

repositories { 
     maven { url 'https://jitpack.io' } 
    } 
dependencies { 
    compile 'com.github.blocoio:faker:1.0.1' 
    compile 'com.googlecode.json-simple:json-simple:1.1.1' 
} 

Verwenden Sie den folgenden Java-Code so viele gefälschte Objekte, wie Sie zu generieren wollen, hier verwende ich eine Schleife, um 3 Objekte zu generieren, und speichern Sie es in einer json.file.

public class FakerTest { 
    static FileWriter file; 
    public static void main(String[] args) { 
     try { 
      file = new FileWriter("c:\\<Your Location>\\test.json"); //try opening the file 
      for (int i = 0; i < 3; i ++) { 
       Faker faker = new Faker(); 
       JSONObject obj = new JSONObject(); 
       obj.put("Name", faker.name.firstName()); 
       obj.put("address",faker.address.streetAddress()); 
       obj.put("email",faker.internet.email()); 
       file.write(obj.toJSONString()); 

      } 
      file.flush(); 
      file.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Ergebnisse der JSON-Datei:

{ "Adresse": "790 Murphy Vista", "E-Mail": "willa @ schmittjenkinsandabernathy.net "," Name ":" Christop "} {" Adresse ":" 7706 Larkin Fluss "," email ":" [email protected] "," Name ":" Braeden "} {" Adresse ":" 1893 Jamarcus Rest“, "E-Mail": "[email protected]", "Name": " Marlee"}

Nun laden sie mit mongoimport

Die Fälscher Bibliothek lassen Sie generieren Sie viele Felder, siehe auch:

0

Ich habe ein Open-Source-Tool erstellt, um zufällige BSON-Dokumente zu generieren und sie in Mongodb einzufügen. Es unterstützt alle BSON types (ObjectId, ISODate, binäre Daten usw.)
Die Dokumente werden entsprechend einer Konfigurationsdatei generiert, so dass Sie die gewünschten Felder und ihre Typen angeben können.

Es ist auch Bezug zwischen mehrere Sammlung unterstützt, mehrere Datenbank-Schreiben, sharded Sammlung, Index Gebäuden ...

Es ist hier verfügbar: github.com/feliixx/mgodatagen

Verwandte Themen