MongoDB용 실제와 같은 더미 데이터 생성
Source: Dev.to
tl;dr
MongoDB Compass에서 내보낸 데이터 스키마를 활용하고, 벡터 검색을 통해 각 필드에 가장 적합한 Faker 메서드를 결정한 뒤, 현실적인 더미 데이터를 생성하는 도구를 만들었습니다.
레포지토리는 여기서 확인할 수 있습니다: mock-data
MongoDB Compass가 이제 데이터 모델링을 지원합니다. 이는 오랫동안 기대해 온 기능이죠. 많은 사람들이 모델을 데이터 사전으로 사용하지만, 모델이 있으면 코딩 및 테스트를 위한 현실적인 더미 데이터를 빠르게 생성할 수 있습니다. 이를 수동으로 스크립트 작성하는 데는 시간이 많이 걸리므로, 자동화하는 방법을 모색했습니다.
How to make it look real?
더미 데이터를 생성해 본 적이 있다면 Faker에 익숙할 것입니다. 2008년에 처음 등장한 Faker는 이메일, 이름, 주소, 번호판 등 일반적인 데이터에 대해 280개 이상의 생성 메서드를 제공하며, 커스텀 프로바이더를 통해 확장할 수도 있습니다.
바퀴를 다시 만들기보다 **Faker for Python**을 사용해 데이터를 모킹합니다.
Associate generator methods with fields
JSON 스키마의 구조를 깨뜨리지 않으면서 Faker 메서드를 필드에 연결하기 위해, 필드의 description 속성에 # 문자로 감싼 주석을 삽입합니다. 도구는 두 # 사이의 텍스트를 추출해 Faker 메서드(파라미터 포함)로 사용합니다. 일반 설명을 주석과 함께 포함시킬 수도 있습니다.
Make it even easier
모든 필드에 수동으로 주석을 다는 일은 여전히 번거롭습니다. Faker 메서드 선택을 자동화하기 위해 벡터 검색과 **ChromaDB**을 활용합니다:
- 라이브러리에서 모든 Faker 메서드를 추출하고 각 메서드 이름에 대한 벡터를 계산합니다.
- 스키마의 각 필드 이름에 대한 벡터를 계산합니다.
- 벡터 데이터베이스를 검색해 필드 이름 벡터와 가장 잘 맞는 Faker 메서드 벡터를 찾습니다.
Requirements for the approach
- Faker 메서드 이름은 의미가 있어야 합니다(실제 그렇습니다).
- 필드 이름도 의미가 있어야 합니다(잘 설계된 스키마라면 일반적으로 그렇습니다).
- 선택된 Faker 메서드는 JSON 스키마에 지정된 타입으로 변환 가능한 데이터를 생성할 수 있어야 합니다. ChromaDB의 필터링 기능이 이 제약을 강제합니다.
추가적인 작은 최적화가 추측 정확도를 높입니다. 결과적으로 MongoDB Compass 스키마에서 현실적인 더미 데이터를 자동으로 생성할 수 있는 도구가 완성되었습니다.
Usage
# Clone the repository
git clone https://github.com/zhangyaoxing/mock-data.git
cd mock-data
# Install in development mode
pip install -e .
# Generate dummy data as ejson files
mockdata -s schemas/BookStore.json -n 50 -t ejson output/
# Generate dummy data directly into MongoDB
mockdata -s schemas/BookStore.json -n 50 -t mongodb mongodb://localhost/
# Generate dummy data into Kafka
mockdata -s schemas/BookStore.json -n 50 -t kafka localhost:9092
GitHub repository: Mock Data