数据库中插入大量数据

面向初始化、压测和数据构造场景的批量插入思路,包括接口压入、压测工具和直接 SQL 导入。

#type / howto #status / growing #tech / dev / backend #resource / database

[!info] related notes

数据库中插入大量数据

目标

在初始化数据、构造测试集或压测时,选择合适的批量写入方式,避免一条条手工插入。

前置条件

  • 先明确这是开发/测试数据还是正式业务数据
  • 先明确写入入口是 API、脚本、导入文件还是直接 SQL

步骤

常见方式有四类:

  1. 代码里提供批量写入接口
  2. 用 Postman / Apifox / JMeter 批量调用接口
  3. 用脚本直接调用服务端 SDK 或 ORM
  4. 直接通过 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 导入
  • 直接写数据库最快,但绕过了业务校验,适合造数,不适合验证接口逻辑
  • 批量写入时要留意索引、事务大小和唯一约束,否则“看起来只是导数”,实际上会把数据库压得很重
创建于 2025/1/1 更新于 2026/5/27