作者: AlexBlair
作者网站: https://www.alexblair.org
A high-performance Rust-based middleware that solidifies MySQL query results (supporting time, JSON, binary, array formats and CTE complex logic) into JSON, and implements dual-write & caching mechanisms to achieve millisecond-level response for hot data interfaces under high concurrency.
一款基于 Rust 开发的高性能中间件,可将 MySQL 查询结果(支持时间、JSON、二进制、数组格式及 CTE 复杂查询逻辑)固化为 JSON 格式,并通过双写与缓存机制,实现高并发场景下热数据接口的毫秒级响应。
- 高性能转换:基于Rust语言实现,将MySQL查询结果高效转换为JSON格式
- 全面数据类型支持:支持时间、JSON、二进制、数组格式以及CTE复杂逻辑
- 双写机制:确保数据一致性和可靠性
- 智能缓存:实现热数据缓存,大幅降低数据库压力
- 高并发处理:采用异步设计,支持大规模并发请求
- 定时更新:可配置不同SQL文件的更新间隔时间
- 原子写入:确保JSON文件生成的完整性和一致性
- 灵活配置:支持通过配置文件自定义各种参数
- Rust: 1.70+ (2024 edition)
- MySQL: 5.7+ / MariaDB 10.2+
- 操作系统: Linux / macOS / Windows
git clone https://github.com/alexblair/FastSQL2Json.git
cd FastSQL2Jsoncargo build# 开发构建
cargo build
# 生产构建(优化)
cargo build --releasecargo test项目使用config.toml文件进行配置。首先复制示例配置文件并根据实际情况修改:
cp config.toml.example config.toml[database]
host = "localhost" # MySQL主机地址
port = 3306 # MySQL端口号
user = "root" # MySQL用户名
password = "password" # MySQL密码
database = "test_db" # 数据库名称
[app]
start_dir = "./sql_files" # SQL文件存放目录
[file_intervals]
# 设置特定SQL文件的生成间隔时间(分钟)
"./sql_files/query1.sql" = 60 # 每小时更新一次
"./sql_files/subdir/query2.sql" = 1440 # 每天更新一次FastSQL2Json提供了灵活的命令行选项,允许您根据需要调整应用程序的行为。以下是所有可用的命令行选项:
# 基本语法
FastSQL2Json [OPTIONS]
# 使用cargo运行
cargo run -- [OPTIONS]| 选项 | 长选项 | 描述 | 默认值 |
|---|---|---|---|
-c |
--config |
指定配置文件路径 | config.toml(当前目录) |
-q |
--quiet |
禁用所有日志输出 | 否 |
-e |
--error-only |
仅输出错误级别的日志 | 否 |
-h |
--help |
显示帮助信息 | - |
-V |
--version |
显示版本信息 | - |
功能:指定应用程序使用的配置文件路径。
语法:
FastSQL2Json -c <CONFIG_FILE_PATH>
FastSQL2Json --config <CONFIG_FILE_PATH>参数:
<CONFIG_FILE_PATH>:配置文件的绝对路径或相对路径(相对于当前工作目录)
示例:
# 使用相对路径指定配置文件
FastSQL2Json -c ./configs/my_config.toml
# 使用绝对路径指定配置文件
FastSQL2Json --config /etc/fastsql2json/config.toml
# 使用cargo运行时指定配置文件
cargo run -- -c ./test_config.toml说明:
- 如果不指定此选项,应用程序将默认在当前目录下查找
config.toml文件 - 配置文件必须遵循TOML格式,结构请参考配置说明部分
功能:禁用所有日志输出,使应用程序在静默模式下运行。
语法:
FastSQL2Json -q
FastSQL2Json --quiet示例:
# 静默模式运行,不输出任何日志
FastSQL2Json -q
# 结合配置文件选项使用
FastSQL2Json -c ./config.toml -q说明:
- 此选项适用于生产环境,减少日志输出带来的性能开销
- 即使启用静默模式,应用程序仍会正常执行所有功能,只是不输出日志信息
- 如果同时指定了
-q和-e选项,-q将优先生效,禁用所有输出
功能:仅输出错误级别的日志信息,忽略信息、警告等其他级别的日志。
语法:
FastSQL2Json -e
FastSQL2Json --error-only示例:
# 仅输出错误日志
FastSQL2Json -e
# 结合配置文件选项使用
FastSQL2Json -c ./config.toml -e说明:
- 此选项适用于生产环境,仅关注错误信息
- 错误日志包括数据库连接错误、SQL执行错误、文件写入错误等关键错误信息
- 正常情况下,应用程序会输出INFO级别的日志,如"Loaded configuration from config.toml"、"Connected to MySQL database"等
您可以根据需要组合使用多个命令行选项:
# 使用指定配置文件,仅输出错误日志
FastSQL2Json -c ./prod_config.toml -e
# 使用指定配置文件,无任何输出
FastSQL2Json --config ./test_config.toml --quiet
# 查看帮助信息
FastSQL2Json -h
# 查看版本信息
FastSQL2Json -V在sql_files目录下创建SQL文件,例如query1.sql:
-- 查询用户信息
SELECT id, username, email, created_at
FROM users
WHERE status = 1
ORDER BY created_at DESC
LIMIT 10;# 默认方式运行(使用当前目录下的config.toml)
FastSQL2Json
# 使用开发构建运行
cargo run
# 使用生产构建运行
./target/release/FastSQL2Json
# 指定配置文件运行
./target/release/FastSQL2Json -c ./configs/prod.toml
# 静默模式运行生产构建
./target/release/FastSQL2Json -q应用运行后,会在与SQL文件相同的目录下生成对应的JSON文件,例如query1.json:
[
{
"id": 1,
"username": "user1",
"email": "user1@example.com",
"created_at": "2025-12-29T15:30:45Z"
},
{
"id": 2,
"username": "user2",
"email": "user2@example.com",
"created_at": "2025-12-28T14:20:30Z"
}
]功能:指定应用程序使用的配置文件路径。
语法:
FastSQL2Json -c <配置文件路径>
FastSQL2Json --config <配置文件路径>参数:
<配置文件路径>:配置文件的绝对路径或相对路径(相对于当前工作目录)
示例:
# 使用相对路径指定配置文件
FastSQL2Json -c ./configs/my_config.toml
# 使用绝对路径指定配置文件
FastSQL2Json --config /etc/fastsql2json/config.toml说明:
- 如果不指定此选项,应用程序将默认在当前目录下查找
config.toml文件 - 配置文件必须遵循TOML格式,结构请参考配置说明部分
功能:禁用所有日志输出,使应用程序在静默模式下运行。
语法:
FastSQL2Json -q
FastSQL2Json --quiet示例:
# 静默模式运行,不输出任何日志
FastSQL2Json -q
# 结合配置文件选项使用
FastSQL2Json -c ./config.toml -q说明:
- 此选项适用于生产环境,减少日志输出带来的性能开销
- 即使启用静默模式,应用程序仍会正常执行所有功能,只是不输出日志信息
- 如果同时指定了
-q和-e选项,-q将优先生效,禁用所有输出
功能:仅输出错误级别的日志信息,忽略信息、警告等其他级别的日志。
语法:
FastSQL2Json -e
FastSQL2Json --error-only示例:
# 仅输出错误日志
FastSQL2Json -e
# 结合配置文件选项使用
FastSQL2Json -c ./config.toml -e说明:
- 此选项适用于生产环境,仅关注错误信息
- 错误日志包括数据库连接错误、SQL执行错误、文件写入错误等关键错误信息
- 正常情况下,应用程序会输出INFO级别的日志,如"Loaded configuration from config.toml"、"Connected to MySQL database"等
-- 使用CTE查询复杂数据
WITH recent_orders AS (
SELECT user_id, SUM(amount) AS total_amount
FROM orders
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY user_id
)
SELECT u.id, u.username, ro.total_amount
FROM users u
JOIN recent_orders ro ON u.id = ro.user_id
WHERE ro.total_amount > 1000
ORDER BY ro.total_amount DESC;-- 查询包含JSON字段的数据
SELECT id, name, config->'$.theme' AS theme, config->'$.notifications' AS notifications
FROM user_settings
WHERE id = 1;-- 查询并生成数组格式结果
SELECT GROUP_CONCAT(tag_name) AS tags
FROM user_tags
WHERE user_id = 1;A: 请检查config.toml文件中的数据库配置是否正确,包括主机地址、端口号、用户名、密码和数据库名称。同时确保MySQL服务正在运行,并且允许远程连接(如果需要)。
A: 目前并发数固定为5,您可以修改src/main.rs文件中的max_concurrent变量来调整:
let max_concurrent = 5; // 修改为您需要的并发数A: 应用使用env_logger库记录日志,您可以通过设置RUST_LOG环境变量来调整日志级别:
RUST_LOG=info cargo run # 显示信息及以上级别的日志
RUST_LOG=debug cargo run # 显示调试及以上级别的日志A: 请确保应用程序对输出目录有写入权限。您可以使用chmod命令调整目录权限:
chmod 755 ./sql_files我们欢迎社区贡献!如果您想参与项目开发,请遵循以下步骤:
- Fork 仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
- 遵循Rust官方代码风格
- 所有新功能必须包含测试
- 提交前运行
cargo fmt和cargo clippy - 编写清晰的提交信息
本项目采用 CC BY-NC-SA 4.0(署名-非商业性使用-相同方式共享 4.0 国际)许可证。
- ✅ 允许:二次修改、分发、展示、表演
- ❌ 禁止:商业用途
- ✅ 要求:署名、相同方式共享
- 署名:必须给出适当的署名,提供指向许可证的链接,并表明是否对作品进行了修改。
- 非商业性使用:不得将本作品用于商业目的。
- 相同方式共享:如果您修改、转换本作品或者以本作品为基础进行创作,必须基于相同的许可证分发您的贡献作品。
完整的许可证文本可在Creative Commons官网查看。
- 项目主页: https://github.com/alexblair/FastSQL2Json
- Issues: https://github.com/alexblair/FastSQL2Json/issues
感谢所有为本项目做出贡献的开发者和社区成员!
FastSQL2Json - 高性能MySQL查询结果转JSON中间件