生成用于 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:9092GitHub repository: Mock Data