ITPub博客

首页 > 数据库 > 国内数据库 > 从 taosBenchmark 到 taosgen:一次压测工具的工程化升级

从 taosBenchmark 到 taosgen:一次压测工具的工程化升级

原创 国内数据库 作者:TDengine 时间:2026-05-21 17:03:31 0 删除 编辑
在物联网、工业互联网和智能设备快速发展的今天,时序数据库(Time Series Database)已成为处理海量传感器数据的核心基础设施。而对这些系统的性能评估、容量规划和稳定性验证,则离不开高效、灵活的压力测试工具。
过去,我们主要使用 taosBenchmark 来做 TDengine 的基础写入性能测试。它在很多场景下已经足够好用,尤其适合快速验证数据库写入能力。不过,随着实际业务越来越复杂,我们也遇到了一些新的需求。
比如,数据不一定只写入数据库,也可能同时进入 MQTT、Kafka 等消息中间件;数据生成方式也不能总是简单随机,而是希望更接近真实设备的变化规律;有些测试还需要按照历史数据的时间间隔进行回放,而不是一味追求最大吞吐——随着这类需求增多,传统 benchmark 工具在配置灵活性、扩展能力以及真实复杂流程模拟方面的不足也逐渐显现出来。
基于这些考虑,我们推出了 taosgen。它是一款面向时序数据场景的新一代性能基准与数据模拟工具,具备强大功能且高度可扩展,希望在“压测”之外,也能承担更多数据生成、链路验证和历史数据回放的工作。

什么是 taosgen?

简单来说,taosgen 是一个可以生成时序数据,并把这些数据写入不同目标系统的工具。目前它支持:
  • 高并发数据生成与写入 TDengine;
  • 向 MQTT Broker 发布模拟设备消息;
  • 向 Kafka Topic 生产结构化数据流;
  • 基于 DAG 的作业编排,构建复杂测试流程;
  • 使用 Lua 表达式动态生成逼真数据;
  • 实时“播放”历史数据,还原真实时间线。
也就是说,taosgen 不只是一个写入压测工具,更是一个面向未来的、支持多目标、可编程的数据流模拟引擎,可以用来模拟设备上报、数据库写入、消息队列接入等多个环节。目前 taosgen 已支持 Windows、Linux 和 macOS,可直接下载使用。

为什么选择 taosgen?相比 taosBenchmark 的五大升级

taosBenchmark 更适合完成标准化的数据库写入测试,而 taosgen 关注的是更复杂的测试过程。具体来说,升级如下:
除此之外,taosgen 还具备以下亮点特性:

1. 灵活的作业编排(Job Orchestration)

taosgen 以“作业(Job)”为基本执行单元,每个作业由多个“步骤(Step)”组成,并可通过 needs 字段声明前置依赖,形成有向无环图(DAG),实现如“先建库 → 再建表 → 最后写入”的标准流程,也可并行执行多个独立任务。
tdengine:
  dsn: taos+ws://root:taosdata@127.0.0.1:6041/tsbench
  drop_if_exists: true
  props: precision 'ms' vgroups 4
schema:
  name: meters
  tbname:
    prefix: d
    count: 100
    from: 0
jobs:
  create_db:
    name: Create Database
    steps:
      - uses: tdengine/create-database
  create_stable:
    name: Create Super Table
    needs: [create_db] # 依赖 create_db 完成
    steps:
      - uses: tdengine/create-super-table
  create_ctable:
    name: Create Child Table
    needs: [create_stable] # 依赖 create_stable 完成
    steps:
      - uses: tdengine/create-child-table 
  insert_data:
    name: Insert Data
    needs: [create_ctable] # 依赖 create_ctable 完成
    steps:
      - uses: tdengine/insert

2. 多样化的数据生成方式

taosgen 支持两种主要数据源:
  • 即时生成(Generator Mode):无需预生成大文件,直接通过配置规则动态生成数据。
  • CSV 文件导入(CSV Mode):复用现有 CSV 元数据或历史数据进行回放。
更强大的是,你可以在列级别使用 Lua 表达式来生成非线性、带噪声、周期性变化的数据,例如模拟电压波动、温度周期等真实物理现象:
columns:
  - name: voltage
    type: FLOAT
    gen_type: expression
    expr: "220 + 10 * math.sin(_i / 30) + 5 * math.random()" # 模拟电网波动

3. 真实时间“播放”能力

在很多压测场景中,大家首先关注的是吞吐量,也就是系统能以多快的速度写入数据。但在历史数据回放、流处理链路验证、告警规则测试等场景里,数据进入系统的时间节奏同样重要。taosgen 支持 time_interval 策略,可以根据数据时间戳之间的间隔控制发送速度,从而实现“慢放”、“快进”或“按原始速率播放”等不同情况。
steps:
  - uses: tdengine/insert
    with:
      time_interval:
        enabled: true
        interval_strategy: literal # 按数据时间戳精确发送

4. 多协议输出,不止于数据库

在真实系统里,时序数据往往不会只进入数据库。很多设备数据会先通过 MQTT 接入边缘网关或 IoT 平台,也可能通过 Kafka 进入流处理系统(Flink、Spark Streaming),之后再落库或进入下游分析链路。
因此,taosgen 除了支持写入 TDengine,也支持将同一套数据结构发布到 MQTT Broker 或 Kafka Topic。这意味着你可以用同一套 schema 和数据逻辑,同时测试整个数据链路的不同环节。
steps:
  - uses: kafka/produce
    with:
      topic: factory-sensors
      value_serializer: json
      acks: 1

5. 更安全、更易用的配置体验

taosgen 使用 YAML 作为配置格式。相比在命令行中堆大量参数,配置文件更适合描述复杂测试场景,也方便团队共享和版本管理。
另外,taosgen 会自动检测未知或拼写错误的配置项,避免因为配置写错但程序静默忽略,导致测试结果不符合预期。命令行参数的优先级高于配置文件,也方便在调试时临时覆盖部分设置。
这些改动看起来不算“大功能”,但在实际使用中很重要。压测任务往往需要反复执行,如果配置不清楚、错误不明显,后续排查会浪费不少时间。

快速开始:三步体验 taosgen 强大功能

第一步:下载安装

首先需要前往 GitHub Releases 页面(https://github.com/taosdata/taosgen/releases)下载对应平台的二进制包。以 Linux 为例:
# 下载并解压
tar zxvf taosgen-v0.8.6-linux-x64.tar.gz
cd taosgen
# 添加到系统路径(可选)
sudo ln -sf $(pwd)/taosgen /usr/local/bin/taosgen
# 查看版本
taosgen --version

第二步:准备配置文件(config.yaml)

下面是一个简单示例:创建数据库、超级表,并向 10000 张子表写入 10000 条模拟电表数据。
tdengine:
  dsn: taos+ws://root:taosdata@127.0.0.1:6041/tsbench
  drop_if_exists: true
schema:
  name: meters
  tbname:
    prefix: d
    count: 10000
    from: 0
  columns:
    - name: ts
      type: timestamp
      start: now
      precision : ms
      step: 1
    - name: current
      type: float
      min: 5
      max: 20
    - name: voltage
      type: int
      min: 200
      max: 240
    - name: phase
      type: float
      expr: _i * math.pi % 180
  tags:
    - name: groupid
      type: int
      min: 1
      max: 10
    - name: location
      type: binary(24)
      values:
        - New York
        - Los Angeles
        - Chicago
        - Houston
        - Phoenix
        - Philadelphia
        - San Antonio
        - San Diego
        - Dallas
        - Austin
  generation:
    rows_per_table: 10000
    rows_per_batch: 10000
jobs:
  # TDengine insert job
  insert-data:
    steps:
      - uses: tdengine/create-super-table
      - uses: tdengine/create-child-table
      - uses: tdengine/insert

第三步:运行测试

taosgen -c config.yaml
运行完成后,你将在 TDengine 中看到名为 tsbench 的数据库,以及包含万级子表的 meters 超级表,所有数据均已按规则写入。

应用场景:taosgen 能做什么?

taosgen 的使用场景并不局限于“往数据库里写数据”。在很多项目里,我们更关心的是数据从设备侧产生之后,如何进入消息中间件、如何被流处理系统消费、最终又如何写入数据库。taosgen 可以用统一的配置生成和发送这些数据,因此既能做基础压测,也能用来搭建接近真实业务的数据链路。下面这些场景,是它目前比较适合发挥作用的地方。

结语:迈向更真实的性能测试时代

taosgen 的推出,并不是为了替代所有已有工具。taosBenchmark 仍然适合做标准化、直接的 TDengine 写入性能测试。而 taosgen 关注的是另一类问题:当测试场景变得更复杂,数据流不再只进入数据库,数据本身也需要更接近真实业务时,我们需要一个更灵活的工具来描述和执行这些流程。
对于数据库管理员、系统架构师和 IoT 平台开发者来说,taosgen 可以用于容量规划、上线前验证、历史数据回放和故障复现。它让性能测试不再只是简单地“写入一批数据”,而是可以更接近真实系统运行方式。
感兴趣的用户可以下载体验:


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70014783/viewspace-3171829/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
TDengine 是一个 AI 驱动的物联网工业大数据平台,旗下有两款产品:TDengine TSDB——高性能、分布式的时序数据库和 TDengine IDMP——AI 原生的工业数据管理平台。

注册时间:2022-03-07

  • 博文量
    547
  • 访问量
    501600