2015-06-02 41 views
5

Chúng tôi có một dự án mà chúng tôi cần tạo cơ sở dữ liệu giả và dữ liệu giả để thử nghiệm chức năng. Ban đầu chúng tôi bắt đầu với một kịch bản tạo ra các thực thể bằng cách sử dụng mongoose, khởi tạo chúng và lưu chúng.thiết lập dữ liệu giả trong mongodb để thử nghiệm

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

Khi ứng dụng phát triển và mối quan hệ giữa các tài liệu tăng tập lệnh này đã trở thành một mớ hỗn độn tuyệt đối. Bây giờ nó đặt ra một nút cổ chai về thời gian chúng tôi đầu tư vào phát triển ứng dụng.

Câu hỏi đặt ra là, có cách nào tốt hơn để làm điều đó không? ví dụ. một thư viện làm đầy cơ sở dữ liệu với dữ liệu theo cách có cấu trúc hơn? Hoặc chúng ta nên phân tích cú pháp một tập tin như một tập tin csv và sau đó đẩy nó vào mongo?

Câu hỏi đặt ra cho mongodb nhưng nó có thể được khái quát hóa thành bất kỳ loại cơ sở dữ liệu NO-SQL nào cần được lấp đầy với dữ liệu giả. (Nó đơn giản hơn với SQL giống như ngữ pháp cho RDBMS)

Trả lời

5

Bạn có thể thử viết các tệp json thay vì mã và sử dụng mongoimport để tạo lại cơ sở dữ liệu của bạn. Đó là dễ dàng hơn để duy trì hơn km của mã rất tiết và lặp đi lặp lại.

+0

Đó là âm thanh đủ mạnh mẽ. có cách nào dễ dàng để quản lý các mối quan hệ của các tài liệu trong cách tiếp cận này? ví dụ: mỗi học sinh có một trường-id là một trường. Trong kịch bản mongoose của tôi xử lý giai đoạn tạo id này (đơn giản khi bạn tạo đối tượng) - trong phương pháp này, tôi có cần phải đặt Id theo cách thủ công cho các trường và liên kết chúng trong tài liệu json không? – ralzaul

+0

Có, bạn sẽ phải duy trì quan hệ theo cách thủ công. Hãy nhớ rằng một '_id' không cần phải là một ObjectId. Nó có thể là bất cứ điều gì miễn là nó là duy nhất. Vì vậy, 'school.json' có thể chứa:' {_id: 1, name: "Foo"} 'và' student.json' có thể chứa '{_id:" student_1 ", school_id: 1, name:" John "}' . Hãy nhớ cố gắng nhúng tài liệu thay vì tạo "tham gia giống SQL". –

+0

Ngoài ra, tôi sẽ sử dụng các tệp json (nhỏ) khác nhau để đảm bảo tất cả các thử nghiệm của tôi vẫn độc lập để tránh các tập dữ liệu khổng lồ. –

2

Download tệp json này do MongoDB cung cấp.

Bạn có thể mongoimport nó sử dụng:

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

tin chi tiết về Mongoimport thể được tìm thấy here.

+1

cảm ơn, nhưng tôi thà sử dụng mô hình dữ liệu của riêng mình. Nó không phải là một dữ liệu ngẫu nhiên mà là một dữ liệu ngẫu nhiên trong mô hình dữ liệu của tôi. – ralzaul

4

Tôi đồng ý với các giải pháp trên và nghĩ rằng cách tốt nhất là:

  1. Tạo thông tin giả sử dụng một công cụ thư viện.
  2. Chuyển thông tin giả thành tệp json.
  3. Tải tệp lên mongo bằng cách sử dụng mongoimport.

Tôi có thư viện ở đó cho phép bạn tạo dữ liệu giả miễn phí như Faker.js (nếu bạn quen thuộc với node.js và js nói chung) hoặc bạn có thể sử dụng phiên bản java miễn phí của Faker ở đây: https://github.com/blocoio/faker

Tôi cũng tìm thấy giải pháp trả tiền tại đây: https://www.mockaroo.com/ nhưng không biết tại sao bất kỳ ai muốn thanh toán vì điều này là khá dễ dàng để tạo dữ liệu giả mạo - đây là hướng dẫn từng bước.

nhập thư viện kẻ giả mạo java và nhà văn json vào dự án của bạn (Tôi đang sử dụng gradle vì vậy đây là mã gradle):

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' 
} 

Sử dụng mã java sau đây để tạo ra càng nhiều đối tượng giả như bạn muốn, ở đây tôi đang sử dụng một vòng lặp để tạo ra 3 đối tượng, và lưu nó vào một tệp 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(); 
     } 
    } 
} 

Kết quả của tập tin json:

{ "địa chỉ": "790 Murphy Vista", "email": "willa @ schmittjenkinsandabernathy.net "," Name ":" Christop "} {" address ":" 7706 Larkin Sông "," email ":" [email protected] "," Tên ":" Braeden "} {" địa chỉ ":" 1893 Jamarcus Nghỉ ngơi", "email": "[email protected]", "Tên": " Marlee"}

Bây giờ, tải nó lên với mongoimport

thư viện kẻ giả mạo sẽ cho phép bạn tạo nhiều trường, vui lòng tham khảo:

https://github.com/stympy/faker/blob/master/README.md

0

Tôi đã tạo một công cụ nguồn mở để tạo các tài liệu BSON ngẫu nhiên và chèn chúng vào Mongodb. Nó hỗ trợ tất cả BSON types (ObjectId, ISODate, dữ liệu nhị phân ...)
Tài liệu được tạo theo tệp cấu hình, vì vậy bạn có thể chỉ định trường bạn muốn và loại của chúng.

Nó cũng hỗ trợ tham khảo giữa nhiều Bộ sưu tập, nhiều cơ sở dữ liệu văn bản, bộ sưu tập sharded, xây dựng chỉ số ...

Nó có sẵn ở đây: github.com/feliixx/mgodatagen

Các vấn đề liên quan