数据库中插入大量数据
面向初始化、压测和数据构造场景的批量插入思路,包括接口压入、压测工具和直接 SQL 导入。
#type / howto
#status / growing
#tech / dev / backend
#resource / database
[!info] related notes
数据库中插入大量数据
目标
在初始化数据、构造测试集或压测时,选择合适的批量写入方式,避免一条条手工插入。
前置条件
- 先明确这是开发/测试数据还是正式业务数据
- 先明确写入入口是 API、脚本、导入文件还是直接 SQL
步骤
常见方式有四类:
- 代码里提供批量写入接口
- 用 Postman / Apifox / JMeter 批量调用接口
- 用脚本直接调用服务端 SDK 或 ORM
- 直接通过 SQL / 导入工具写入数据库
如果目标是“同时验证接口逻辑”和“快速构造大量数据”,第 2 类很适合。
Postman 批量调用
请求模板:
POST http://xxxx/api/user/register
Content-Type: application/json
{
"userAccount": "{{userAccount}}",
"userPassword": "12345678",
"checkPassword": "12345678",
"planetCode": "{{planetCode}}"
}
用脚本生成测试数据
import csv
import random
import string
with open('users.csv', 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['userAccount', 'planetCode'])
for i in range(1, 1001):
username = 'user' + ''.join(random.choices(string.ascii_lowercase, k=5)) + str(i)
planet_code = 10000 + i
writer.writerow([username, planet_code])
配置批量运行
- 选择集合
- 载入 CSV 数据文件
- 设置
Iterations - 视服务承受能力设置延迟
- 保留响应结果方便回看失败样本
验证
- 插入总数是否和输入数据量一致
- 唯一约束、外键约束是否被正确触发
- 数据写入耗时和服务端错误率是否在预期内
常见问题
- 直接压 API 更贴近真实链路,但速度通常慢于直接 SQL 导入
- 直接写数据库最快,但绕过了业务校验,适合造数,不适合验证接口逻辑
- 批量写入时要留意索引、事务大小和唯一约束,否则“看起来只是导数”,实际上会把数据库压得很重