DataForge 项目介绍

什么是 DataForge?

DataForge 是一个为 Rust 开发者打造的高性能随机数据生成与数据库填充解决方案。它专为测试和开发过程中对高质量测试数据的需求而设计。

高性能

基于 Rust 的零成本抽象和多线程并行处理

数据库支持

支持 MySQL、PostgreSQL、SQLite

多语言支持

内置中文、英文、日文等多语言数据生成器

高度可定制

支持自定义生成器、插件系统和灵活配置

安装配置

1

添加依赖

[dependencies]
dataforge = "0.1.0"

# 启用数据库特性
dataforge = { version = "0.1.0", features = ["database"] }
2

验证安装

use dataforge::generators::*;

fn main() {
    let name = name::zh_cn_fullname();
    let email = internet::email();
    println!("姓名: {}, 邮箱: {}", name, email);
}

快速开始

基础数据生成

use dataforge::generators::*;
use serde_json::json;

fn main() -> Result<(), Box> {
    let user = json!({
        "id": uuid_v4(),
        "name": name::zh_cn_fullname(),
        "age": number::adult_age(),
        "email": internet::email(),
        "phone": number::phone_number_cn(),
        "created_at": datetime::iso8601()
    });
    
    println!("{}", serde_json::to_string_pretty(&user)?);
    Ok(())
}

批量数据生成

use dataforge::core::{CoreEngine, GenConfig};

fn main() -> Result<(), Box> {
    let config = GenConfig::default();
    let engine = CoreEngine::new(config);
    
    // 生成 1000 条数据
    let data = engine.generate_batch(1000)?;
    println!("成功生成 {} 条数据", data.len());
    
    Ok(())
}

数据生成器

姓名生成器

// 中文姓名
let name = name::zh_cn_fullname();
// 英文姓名
let name = name::en_us_fullname();
// 日文姓名
let name = name::ja_jp_fullname();

地址生成器

// 中国地址
let addr = address::zh_address();
// 美国地址
let addr = address::us_address();
// 省份/州
let province = address::zh_province();

网络数据

// 邮箱地址
let email = internet::email();
// IP 地址
let ip = internet::ipv4_address();
// 域名
let domain = internet::domain_name();

数字生成器

// 中国手机号
let phone = number::phone_number_cn();
// 身份证号
let id = number::id_card_cn();
// 随机年龄
let age = number::adult_age();

日期时间

// ISO8601 格式
let date = datetime::iso8601();
// 中文日期
let cn_date = datetime::chinese_date();
// 生日
let birthday = datetime::birthday();

核心引擎

配置选项

use dataforge::core::{GenConfig, GenerationStrategy};
use dataforge::Language;

let config = GenConfig {
    batch_size: 1000,           // 批处理大小
    locale: Language::ZhCN,     // 语言设置
    strategy: GenerationStrategy::Random, // 生成策略
    null_probability: 0.05,     // 空值概率
    parallelism: 4,             // 并行度
};

生成策略

Random

完全随机生成,适合测试数据多样性

Sequential

按顺序生成,适合需要有序数据的场景

Mixed

混合策略,平衡随机性和有序性

数据库集成

数据库填充

use dataforge::filling::{DatabaseFiller, ConnectionConfig};

#[tokio::main]
async fn main() -> Result<(), Box> {
    let config = ConnectionConfig {
        connection_string: "mysql://user:pass@localhost:3306/db".to_string(),
        max_connections: 10,
        connection_timeout: std::time::Duration::from_secs(30),
    };
    
    let filler = DatabaseFiller::new(config).await?;
    
    // 填充用户表,生成 10000 条记录
    filler.fill_table("users", 10000, &engine).await?;
    
    Ok(())
}

支持的数据库

MySQL

完全支持,包括自动 Schema 推断

PostgreSQL

支持高级数据类型和约束

SQLite

轻量级,适合开发和测试

完整示例

电商用户数据生成

use dataforge::*;
use serde_json::json;

fn generate_ecommerce_users(count: usize) -> Vec {
    (0..count).map(|_| {
        json!({
            "user_id": uuid_v4(),
            "username": format!("user_{}", number::integer_range(1000, 9999)),
            "email": internet::email(),
            "phone": number::phone_number_cn(),
            "real_name": name::zh_cn_fullname(),
            "gender": if rand::random::() { "男" } else { "女" },
            "age": number::adult_age(),
            "address": {
                "province": address::zh_province(),
                "city": address::zh_city(),
                "district": address::zh_district(),
                "street": address::zh_street()
            },
            "registration_date": datetime::past_date(),
            "last_login": datetime::recent_datetime(),
            "is_vip": rand::random::(),
            "credit_score": number::integer_range(300, 850)
        })
    }).collect()
}

fn main() {
    let users = generate_ecommerce_users(100);
    println!("生成了 {} 个电商用户", users.len());
}

高性能批量生成

use dataforge::core::{CoreEngine, GenConfig, GenerationStrategy};
use dataforge::multithreading::ParallelGenerator;

fn high_performance_generation() -> Result<(), Box> {
    let config = GenConfig {
        batch_size: 10000,
        strategy: GenerationStrategy::Random,
        parallelism: num_cpus::get(),
        enable_memory_pool: true,
        ..Default::default()
    };
    
    let engine = CoreEngine::new(config);
    let parallel_gen = ParallelGenerator::new(engine);
    
    // 并行生成 100 万条数据
    let start = std::time::Instant::now();
    let data = parallel_gen.generate_parallel(1_000_000)?;
    let duration = start.elapsed();
    
    println!("生成 {} 条数据,耗时: {:?}", data.len(), duration);
    println!("生成速度: {:.2} 条/秒", data.len() as f64 / duration.as_secs_f64());
    
    Ok(())
}

API 参考

核心模块

CoreEngine 核心数据生成引擎
GenConfig 生成配置管理
GenerationStrategy 生成策略枚举

生成器模块

name::* 姓名生成器函数
address::* 地址生成器函数
internet::* 网络数据生成器
number::* 数字生成器函数
datetime::* 日期时间生成器

数据库模块

DatabaseFiller 数据库填充器
ConnectionConfig 数据库连接配置
SchemaParser 数据库模式解析器

宏和工具

forge!() 数据生成宏
pattern!() 模式生成宏
rand_num!() 随机数生成宏

版本信息

当前版本:0.1.0

最后更新:2025年9月

兼容性:Rust 1.85.1+