6小时从0到1:我用AI造了个分片SQL生成器

TL;DR

2025年12月初,因旧系统数据修复需要,我在没有db-proxy的情况下,用6小时时间让AI从零开发了一个分片SQL生成器。纯Node.js原生实现,支持6种分片算法,包含完整UI界面和Docker部署方案。代码已开源,体验地址:shard-sql-generator-demo.bpdream.com


The Incident:周四下午的未定级问题

那是12月初的一个周四下午,用户资金划转数据异常。

具体场景是这样的:我们有一个项目,需要通过脚本批量操作用户资金。脚本执行后,发现数据错误------幸运的是,错误金额小于应划转金额,没有造成资损。

但问题来了:需要修复数据。

监控系统有1小时延时,等我们发现问题时,已经过去很久了。我赶紧找相关RD拉数据,对方问:"你要哪个分片的数据?"

我愣住了:"分片?db-proxy不是自动路由吗?"

对方:"这个旧系统没有db-proxy,需要手动指定分片ID。"

那一刻,我脑子里闪过一个念头:这不就是典型的"日常琐事"吗?


The Struggle:LLM救场,但痛点犹在

对方RD说:"没事,我让LLM帮我生成分片SQL。"

几分钟后,他发来了一堆SQL语句,每个都带着不同的分片后缀:user_account_0, user_account_1, user_account_2...

问题解决了,但我的职业病犯了:

为什么每次都要问LLM? 为什么没有一个统一的工具来处理这种需求? 为什么分片规则要记在脑子里,而不是可视化配置?

我决定:写一个工具网站。


The Epiphany:AI开发,6小时交付

我打开Trae IDE,选择了标准智能体,模型用的是doubao-seed-code。

整个过程是这样的:

gantt title 6小时开发时间线 dateFormat HH:mm axisFormat %H:%M section 需求阶段 需求分析与技术选型 :a1, 14:00, 30m 架构设计 :a2, after a1, 30m section 开发阶段 后端核心功能实现 :b1, after a2, 2h 前端界面开发 :b2, after b1, 2h API接口对接 :b3, after b2, 30m section 测试与部署 功能测试与修复 :c1, after b3, 30m Docker部署配置 :c2, after c1, 30m

从下午2点开始,到晚上8点,一个完整的分片SQL生成器就上线了。


The System:架构设计

技术选型:纯原生,零依赖

为什么不用Express/Koa/React/Vue?

理由很简单:

  1. 部署成本:第三方依赖越多,部署越复杂
  2. 安全性:依赖越少,攻击面越小
  3. 学习成本:纯原生代码,任何Node.js开发者都能看懂
  4. 性能:原生实现,没有框架开销

核心架构

graph TD A[用户浏览器] --> B[HTTP请求] B --> C[Node.js原生服务器] C --> D[路由处理] D --> E[SQL生成器] D --> F[分片算法引擎] D --> G[脚本管理器] E --> H[返回分片SQL] F --> H G --> H H --> A style A fill:#e1f5ff style C fill:#fff4e1 style H fill:#e8f5e9

分片算法支持

算法类型 适用场景 参数说明
取模算法 数据均匀分布 mod:取模基数
范围分片 有明确范围划分 rangeRules:范围规则配置
哈希分片 字符串类型分片键 hashAlgorithm:哈希算法 numShards:分片数量
一致性哈希 动态增减分片 nodes:节点配置 virtualNodes:虚拟节点数
日期分片 时间序列数据 dateFormat:日期格式
自定义脚本 特殊需求场景 script:自定义脚本内容

The Implementation:核心代码解析

SQL生成器:从原始SQL到分片SQL

核心逻辑在core/sql-generator.js:

javascript 复制代码
function generateShardSQL(originalSQL, shardKey, shardValue, shardId) {
  let shardSQL = originalSQL;

  // 1. 处理表名,添加分片后缀
  const fromTableRegex = /\bFROM\s+([a-zA-Z0-9_.]+)(?:\s+AS\s+([a-zA-Z0-9_]+))?\b/gi;
  shardSQL = shardSQL.replace(fromTableRegex, (match, table, alias) => {
    const tableParts = table.split('.');
    const baseTable = tableParts[tableParts.length - 1];
    const schemaPrefix = tableParts.length > 1 ? tableParts.slice(0, -1).join('.') + '.' : '';
    const shardedTable = `${schemaPrefix}${baseTable}_${shardId}`;
    return alias ? `FROM ${shardedTable} AS ${alias}` : `FROM ${shardedTable}`;
  });

  // 2. 添加分片键条件
  const shardCondition = `${shardKey} = ${typeof shardValue === 'number' ? shardValue : `'${shardValue}'`}`;
  const whereIndex = shardSQL.toLowerCase().indexOf(' where ');

  if (whereIndex !== -1) {
    // 已有WHERE子句,添加AND条件
    const whereEnd = whereIndex + 7;
    shardSQL = shardSQL.slice(0, whereEnd) + `${shardCondition} AND ` + shardSQL.slice(whereEnd);
  } else {
    // 没有WHERE子句,直接添加
    shardSQL += ` WHERE ${shardCondition}`;
  }

  return shardSQL;
}

原始SQL:

sql 复制代码
SELECT * FROM user_account WHERE status = 1

生成后(分片ID=2,分片键=user_id=12345):

sql 复制代码
SELECT * FROM user_account_2 WHERE user_id = 12345 AND status = 1

分片算法:取模算法示例

javascript 复制代码
const shardAlgorithms = {
  mod: (value, config) => {
    const num = parseInt(value);
    const mod = parseInt(config.mod);
    return isNaN(num) ? 0 : num % mod;
  }
};

示例:

  • user_id = 12345, mod = 4
  • 12345 % 4 = 1
  • 路由到分片1

The UI:现代化界面设计

主界面布局

graph LR A[左侧面板
分片规则配置] --> B[中间面板
SQL输入与生成] B --> C[右侧面板
结果展示与历史] style A fill:#e3f2fd style B fill:#f3e5f5 style C fill:#e8f5e9

核心功能模块

  1. 分片规则配置

    • 6种分片算法选择
    • 动态参数配置
    • 自定义脚本编辑器
  2. SQL输入与生成

    • SQL语法高亮
    • 批量分片键值输入
    • 一键生成
  3. 结果展示

    • 分片SQL列表
    • 聚合SQL生成
    • 一键复制/导出
  4. 历史记录

    • 操作历史保存
    • 快速回溯
    • 本地存储

The Deployment:双重部署方案

裸机部署

bash 复制代码
# 1. 克隆项目
git clone https://github.com/skys-mission/ai-dev-demo.git
cd ai-dev-demo/shard-sql-generator

# 2. 启动服务
node server.js

# 3. 访问应用
# http://localhost:3000

环境要求:

  • Node.js 14.0.0 或更高版本
  • 512MB 以上内存
  • 100MB 以上磁盘空间

Docker部署

bash 复制代码
# 1. 构建镜像
docker build -t shard-sql-generator .

# 2. 运行容器
docker run -d -p 3000:3000 --name shard-sql-generator shard-sql-generator

# 3. 使用Docker Compose
docker-compose up -d

Dockerfile:

dockerfile 复制代码
FROM node:14-alpine

WORKDIR /app

COPY package*.json ./
RUN npm install

COPY . .

EXPOSE 3000

CMD ["node", "server.js"]

The Impact:实际应用价值

解决的问题

  1. 效率提升:从"问LLM+手动修改"到"一键生成",节省90%时间
  2. 错误减少:避免手动修改SQL时的拼写错误
  3. 知识沉淀:分片规则可视化配置,不再依赖个人记忆
  4. 团队协作:统一的工具,降低沟通成本

适用场景

  • 数据修复:批量修复分片表数据
  • 数据迁移:跨分片数据迁移
  • 数据分析:分析特定分片的数据
  • 日常运维:快速生成分片SQL

The Reflection:AI开发的思考

为什么能6小时完成?

  1. 需求明确:从实际问题出发,没有过度设计
  2. 技术选型简单:纯原生实现,避免框架学习成本
  3. AI辅助:Trae智能体+doubao-seed-code模型,代码生成效率高
  4. MVP思维:先实现核心功能,再迭代优化

AI开发的局限性

  1. 上下文理解:AI对业务逻辑的理解不如人类,需要明确的需求描述
  2. 代码质量:AI生成的代码需要人工review和优化
  3. 调试成本:AI生成的bug需要人类调试,可能比手写更耗时
  4. 维护性:AI生成的代码可读性可能不如手写

最佳实践

  1. 需求先行:明确需求,再让AI实现
  2. 迭代开发:分阶段实现,每阶段验证
  3. 代码Review:AI生成后,人工review必不可少
  4. 测试驱动:写测试用例,确保功能正确

The Code:开源与贡献

项目地址

项目结构

csharp 复制代码
shard-sql-generator/
├── core/                 # 核心功能模块
│   ├── sql-generator.js  # 分片SQL生成器
│   └── script-manager.js # 脚本管理器
├── public/               # 静态文件目录
│   ├── index.html        # 主页面
│   ├── styles.css        # 样式文件
│   ├── app.js            # 前端逻辑
│   └── modules/          # 功能模块
│       ├── shard-algorithm.js
│       ├── sql-handler.js
│       ├── script-manager.js
│       └── history-manager.js
├── server.js             # 服务器入口
├── Dockerfile            # Docker配置
├── docker-compose.yml    # Docker Compose配置
└── package.json          # 项目配置

技术栈

  • 后端:Node.js 原生 (无第三方依赖)
  • 前端:HTML5 + CSS3 + JavaScript (原生)
  • 存储:localStorage + JSON文件
  • 部署:裸机部署 / Docker容器

Conclusion

6小时,从0到1,一个完整的分片SQL生成器。

这不是什么"革命性"的技术创新,但它解决了一个真实存在的痛点。

在大厂,我们每天都在处理各种"琐事":数据修复、SQL生成、脚本编写...这些事情看似简单,但重复劳动会消耗大量时间。

AI的价值不在于替代人类,而在于把人类从重复劳动中解放出来,让我们专注于更有价值的事情。

这个项目只是一个开始。未来,我会继续用AI解决更多日常琐事,并把经验分享出来。

如果你也有类似的需求,欢迎试用,也欢迎贡献代码。

相关推荐
superman超哥2 小时前
Rust 所有权转移在函数调用中的表现:编译期保证的零成本抽象
开发语言·后端·rust·函数调用·零成本抽象·rust所有权转移
源代码•宸2 小时前
goframe框架签到系统项目开发(实现总积分和积分明细接口、补签日期校验)
后端·golang·postman·web·dao·goframe·补签
耶夫斯计2 小时前
【SQL_agent】基于LLM实现sql助理
数据库·python·sql·语言模型
无限进步_2 小时前
【C语言】堆(Heap)的数据结构与实现:从构建到应用
c语言·数据结构·c++·后端·其他·算法·visual studio
初次攀爬者2 小时前
基于知识库的知策智能体
后端·ai编程
喵叔哟2 小时前
16.项目架构设计
后端·docker·容器·.net
强强强7952 小时前
python代码实现es文章内容向量化并搜索
后端
A黑桃2 小时前
Paimon 表定时 Compact 数据流程与逻辑详解
后端
掘金者阿豪2 小时前
JVM由简入深学习提升分(生产项目内存飙升分析)
后端
小肥柴2 小时前
AI 助力 Android 工程化实践:(三)自建 MCP Server:让大模型接入内部知识库
ai编程