DataForge
高性能数据锻造工坊 - 为Rust开发者打造的随机数据生成与数据库填充解决方案
📋 Prerequisites
nightly版本的Rust编译器
$ rustc --version
rustc 1.85.1 (4eb161250 2025-03-15)
✨ 特性
-
高性能数据生成
- 基于Rust的高性能随机数生成引擎
- 多线程并行生成(rayon驱动)
- 内存池优化技术
-
数据库支持
- 支持MySQL、PostgreSQL、SQLite数据库
- 自动Schema推断与匹配
- 批量插入优化
-
丰富的数据生成器
- 姓名生成器(中文、英文、日文)
- 地址生成器(支持中国地区数据)
- 网络数据生成器(邮箱、URL、IP等)
- 日期时间生成器
- 数字生成器(手机号、身份证等)
-
灵活的生成方式
- 支持正则表达式模式生成
- 提供便捷的宏接口
- 支持自定义生成器扩展
- 多语言数据支持
- 动态字段生成器类型 - 可以为每个字段指定特定的生成器类型
🚀 快速开始
安装
[]
= "0.1.0"
# 可选特性
= { = "0.1.0", = ["database"] }
基础使用
use *;
use forge;
use json;
// 生成测试用户数据
let user = forge!;
println!;
使用宏生成数据
use ;
// 使用正则表达式生成
let city = regex!;
// 使用模式生成
let phone = pattern!;
// 生成随机数
let age = rand_num!;
// 生成日期时间
let timestamp = datetime!;
let iso_date = datetime!;
核心引擎使用
use ;
let config = GenConfig ;
let engine = new;
let data = engine.generate_batch?;
// 获取性能指标
let metrics = engine.metrics;
println!;
数据库填充
use DatabaseForge;
// 创建数据库填充器
let forge = new;
// 配置表并填充数据
let result = forge
.table
.fill_sync?;
println!;
自定义生成器
use ;
use Value;
// 创建数据生成器
let mut forge = new;
// 注册自定义生成器
forge.register;
// 使用自定义生成器
let product_id = forge.generate;
动态字段生成器类型
use ;
// 创建表结构并为字段指定生成器类型
let mut schema = new;
// 添加使用默认生成器的字段(基于数据类型自动生成)
schema.add_field;
// 添加使用特定生成器类型的字段
schema.add_field;
schema.add_field;
schema.add_field;
schema.add_field;
schema.add_field;
// 生成数据
let sample_data = generate_data_by_schema?;
通过使用动态字段生成器类型,您可以消除硬编码的判断逻辑。系统不再需要根据表名或字段名来确定使用哪个生成函数,而是直接根据元数据信息动态生成数据。这使得数据生成更加灵活和可配置。
生成器类型
姓名生成器
name::zh_cn_fullname()- 中文全名name::en_us_fullname()- 英文全名name::ja_jp_fullname()- 日文全名
地址生成器
address::zh_province()- 中国省份address::zh_address()- 中国地址address::us_state()- 美国州名address::us_city()- 美国城市
网络数据生成器
internet::email()- 邮箱地址internet::url()- 网站URLinternet::ip_address()- IP地址internet::mac_address()- MAC地址internet::user_agent()- 用户代理字符串
数字生成器
number::phone_number_cn()- 中国手机号number::id_card_cn()- 中国身份证号number::credit_card_number()- 银行卡号number::adult_age()- 成人年龄number::currency(min, max)- 货币金额
日期时间生成器
datetime::iso8601()- ISO8601格式日期datetime::timestamp()- 时间戳datetime::birthday()- 生日日期datetime::work_time()- 工作时间
高级功能
并行生成
use ;
let config = GenConfig ;
let engine = new;
let results = engine.generate_batch?;
内存优化
use ;
let config = default;
let mut pool = new;
let buffer = pool.allocate?;
规则引擎
use ;
let mut engine = new;
engine.add_rule;
配置文件支持
支持TOML和YAML配置文件:
# dataforge.toml
[generation]
batch_size = 1000
strategy = "Random"
null_probability = 0.05
[database]
url = "mysql://user:pass@localhost/db"
batch_size = 5000
性能特性
- 多线程并行: 基于rayon的高效并行处理
- 内存池: 减少内存分配开销
- 批量操作: 优化数据库插入性能
- 延迟加载: 按需加载数据文件
- 零拷贝: 减少不必要的内存拷贝
项目结构
dataforge/
├── src/
│ ├── core.rs # 核心引擎
│ ├── generators/ # 数据生成器
│ ├── regions/ # 地区数据
│ ├── filling/ # 数据库填充
│ ├── multithreading/ # 多线程处理
│ ├── memory/ # 内存管理
│ ├── customization/ # 用户自定义
│ ├── generation/ # 数据生成
│ ├── db/ # 数据库相关
│ │ └── schema.rs # 模式解析
│ ├── config.rs # 配置管理
│ ├── rules/ # 规则引擎
│ └── macros.rs # 宏定义
├── data/ # 外部数据文件
├── tests/ # 测试文件
└── doc/ # 文档
📚 Ecosystem
dataforge-faker: Ruby Faker-compatible syntax dataforge-sqlx: Async database support via sqlx dataforge-cli: Command-line data generation tool
许可证
本项目采用 MIT 或 Apache-2.0 双重许可证。
贡献
欢迎提交 Issue 和 Pull Request!