# DataForge
[](https://crates.io/crates/dataforge)
[//]: # ([](https://docs.rs/dataforge))
[](build_status)
[](https://opensource.org/licenses/MIT)
[](https://baidu.com)
**高性能数据锻造工坊** - 为Rust开发者打造的随机数据生成与数据库填充解决方案
## 📋 Prerequisites
```
nightly版本的Rust编译器
$ rustc --version
rustc 1.85.1 (4eb161250 2025-03-15)
```
## ✨ 特性
- **高性能数据生成**
- 基于Rust的高性能随机数生成引擎
- 多线程并行生成(rayon驱动)
- 内存池优化技术
- **数据库支持**
- 支持MySQL、PostgreSQL、SQLite数据库
- 自动Schema推断与匹配
- 批量插入优化
- **丰富的数据生成器**
- 姓名生成器(中文、英文、日文)
- 地址生成器(支持中国地区数据)
- 网络数据生成器(邮箱、URL、IP等)
- 日期时间生成器
- 数字生成器(手机号、身份证等)
- **灵活的生成方式**
- 支持正则表达式模式生成
- 提供便捷的宏接口
- 支持自定义生成器扩展
- 多语言数据支持
- **动态字段生成器类型** - 可以为每个字段指定特定的生成器类型
## 🚀 快速开始
### 安装
```toml
[dependencies]
dataforge = "0.1.0"
# 可选特性
dataforge = { version = "0.1.0", features = ["database"] }
```
### 基础使用
```rust
use dataforge::generators::*;
use dataforge::forge;
use serde_json::json;
// 生成测试用户数据
let user = forge!({
"id" => uuid_v4(),
"name" => name::zh_cn_fullname(),
"age" => number::adult_age(),
"email" => internet::email(),
"phone" => number::phone_number_cn(),
"address" => {
"province" => address::zh_province(),
"city" => regex!(r"[\u4e00-\u9fa5]{2,5}市"),
"street" => address::zh_address()
},
"created_at" => datetime::iso8601()
});
println!("{}", serde_json::to_string_pretty(&user).unwrap());
```
### 使用宏生成数据
```rust
use dataforge::{regex, pattern, rand_num, datetime};
// 使用正则表达式生成
let city = regex!(r"[\u4e00-\u9fa5]{2,5}市");
// 使用模式生成
let phone = pattern!("1[3-9]\\d{9}");
// 生成随机数
let age = rand_num!(18, 65);
// 生成日期时间
let timestamp = datetime!("timestamp");
let iso_date = datetime!("iso");
```
### 核心引擎使用
```rust
use dataforge::core::{CoreEngine, GenConfig, GenerationStrategy};
let config = GenConfig {
batch_size: 1000,
strategy: GenerationStrategy::Random,
null_probability: 0.05,
..Default::default()
};
let engine = CoreEngine::new(config);
let data = engine.generate_batch(100)?;
// 获取性能指标
let metrics = engine.metrics();
println!("Generated: {}, Errors: {}",
metrics.generated_count(),
metrics.error_count()
);
```
### 数据库填充
```rust
use dataforge::db::DatabaseForge;
// 创建数据库填充器
let forge = DatabaseForge::new("mysql://user:pass@localhost/db");
// 配置表并填充数据
let result = forge
.table("users", 1000, |t| {
t.field("id", || uuid_v4())
.field("name", || name::zh_cn_fullname())
.field("email", || internet::email())
})
.fill_sync()?;
println!("已填充 {} 条记录", result);
```
### 自定义生成器
```rust
use dataforge::{DataForge, Language};
use serde_json::Value;
// 创建数据生成器
let mut forge = DataForge::new(Language::ZhCN);
// 注册自定义生成器
forge.register("product_id", || {
serde_json::json!(format!("PROD-{:06}", rand::random::<u32>() % 1000000))
});
// 使用自定义生成器
let product_id = forge.generate("product_id");
```
### 动态字段生成器类型
```rust
use dataforge::{
db::schema::{TableSchema, DataType, FieldGeneratorType},
filling::generators::GenericDataGenerator
};
// 创建表结构并为字段指定生成器类型
let mut schema = TableSchema::new("users".to_string());
// 添加使用默认生成器的字段(基于数据类型自动生成)
schema.add_field(
dataforge::db::schema::FieldSchema::new(
"id".to_string(),
DataType::Integer { min: Some(1), max: Some(1000000) }
)
);
// 添加使用特定生成器类型的字段
schema.add_field(
dataforge::db::schema::FieldSchema::new(
"full_name".to_string(),
DataType::String { max_length: Some(100) }
).with_generator_type(FieldGeneratorType::Name)
);
schema.add_field(
dataforge::db::schema::FieldSchema::new(
"email".to_string(),
DataType::Email
).with_generator_type(FieldGeneratorType::RandomEmail)
);
schema.add_field(
dataforge::db::schema::FieldSchema::new(
"phone".to_string(),
DataType::Phone { country: Some("CN".to_string()) }
).with_generator_type(FieldGeneratorType::RandomPhone)
);
schema.add_field(
dataforge::db::schema::FieldSchema::new(
"company".to_string(),
DataType::String { max_length: Some(100) }
).with_generator_type(FieldGeneratorType::CompanyName)
);
schema.add_field(
dataforge::db::schema::FieldSchema::new(
"created_at".to_string(),
DataType::DateTime { format: None }
).with_generator_type(FieldGeneratorType::CurrentTimestamp)
);
// 生成数据
let sample_data = GenericDataGenerator::generate_data_by_schema(&schema, 5)?;
```
通过使用动态字段生成器类型,您可以消除硬编码的判断逻辑。系统不再需要根据表名或字段名来确定使用哪个生成函数,而是直接根据元数据信息动态生成数据。这使得数据生成更加灵活和可配置。
## 生成器类型
### 姓名生成器
- `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()` - 网站URL
- `internet::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()` - 工作时间
## 高级功能
### 并行生成
```rust
use dataforge::core::{CoreEngine, GenConfig, GenerationStrategy};
let config = GenConfig {
batch_size: 1000,
strategy: GenerationStrategy::Random,
parallelism: 4,
..Default::default()
};
let engine = CoreEngine::new(config);
let results = engine.generate_batch(10000)?;
```
### 内存优化
```rust
use dataforge::memory::{MemoryPool, MemoryPoolConfig};
let config = MemoryPoolConfig::default();
let mut pool = MemoryPool::new(config);
let buffer = pool.allocate(1024)?;
```
### 规则引擎
```rust
use dataforge::rules::{RuleEngine, Rule, RuleType};
let mut engine = RuleEngine::new();
engine.add_rule(Rule {
name: "adult_user".to_string(),
rule_type: RuleType::Condition,
condition: "age >= 18".to_string(),
action: "generate_adult_data".to_string(),
});
```
## 配置文件支持
支持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!