# DataForge **Repository Path**: rust_us/data-forge ## Basic Information - **Project Name**: DataForge - **Description**: 基于Rust的高性能随机数生成引擎。 - 200+ 内置数据规则(姓名/地址/日期/货币等) - 支持正则表达式、模式语法、自定义生成器 - 多语言数据支持(中文/英文/日文) - **Primary Language**: Rust - **License**: MIT - **Default Branch**: master - **Homepage**: https://forge.codealy.top - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2025-03-17 - **Last Updated**: 2025-09-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: Rust, datagenerator, rust-library ## README # DataForge [![crates.io](https://img.shields.io/badge/version-0.1.0-yellow)](https://crates.io/crates/dataforge) [//]: # ([![Documentation](https://img.shields.io/docsrs/dataforge)](https://docs.rs/dataforge)) [![](https://img.shields.io/circleci/project/github/badges/shields/master)](build_status) [![license](https://img.shields.io/badge/license-MIT%2FApache--2.0-blue)](https://opensource.org/licenses/MIT) [![Website](https://img.shields.io/badge/官网-whosly-lightgrey?style=social&logo=world&logoColor=blue)](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::() % 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!