基于 IoT-benchmark 的时序数据库性能测试实战:从安装到结果分析

# 基于 IoT-benchmark 的时序数据库性能测试实战:从安装到结果分析


在物联网场景下,时序数据库的性能直接关系到业务系统的响应速度和成本控制。面对众多数据库选型,如何用客观数据指导决策?IoT-benchmark作为清华大学软件学院开源的性能测试工具,提供了标准化的测试方案。本文从零开始,完整演示基于IoT-benchmark的时序数据库性能测试全流程。


## IoT-benchmark 项目概述


IoT-benchmark是一款基于Java开发的时序数据库基准测试工具,专门针对工业物联网场景设计。它采用模块化架构,将工作负载生成、性能指标测量和数据库接口三个核心组件解耦,参考了YCSB测试工具的设计理念。


相比其他测试工具,IoT-benchmark的特色在于:支持多种写入和查询方式,包括批量写入和乱序数据写入模式;集成了系统监控模块,可同时记录测试数据和系统资源使用情况;支持与Tableau集成,实现测试结果可视化。


目前该工具支持的主流时序数据库包括:IoTDB(v1.x/v2.x)、InfluxDB(v1.x/v2.x)、TimescaleDB、TDengine(v2.2.0.2+)、OpenTSDB、QuestDB等。


## 环境准备与安装


### 前置条件


- Java 8 或更高版本

- Maven 3.6+

- Git客户端

- 目标测试数据库已安装运行(以IoTDB 2.0为例)


### 获取项目


```bash

# 克隆项目代码

git clone https://github.com/thulab/iot-benchmark.git

cd iot-benchmark

```


### 编译安装(以IoTDB 2.0测试为例)


```bash

# 第一步:编译IoTDB Session包

# 下载IoTDB 2.0源码

git clone https://github.com/apache/iotdb/tree/rc/2.0.5

cd iotdb

mvn clean package install -pl session -am -DskipTests

cd ..


# 第二步:编译IoT-benchmark测试包

cd iot-benchmark

mvn clean package install -pl iotdb-2.0 -am -DskipTests

```


编译完成后,测试包位于`./iotdb-2.0/target/iotdb-2.0-0.0.1/iotdb-2.0-0.0.1`。


## 测试包结构与配置


### 目录结构


解压测试包后,主要目录如下:


```

iotdb-2.0-0.0.1/

├── benchmark.sh          # Linux/Mac启动脚本

├── benchmark.bat         # Windows启动脚本

├── conf/                 # 配置文件目录

│   └── config.properties # 核心配置文件

├── bin/                  # 初始化脚本目录

│   └── startup.sh        # 初始化脚本

├── lib/                  # 依赖库

├── logs/                 # 测试日志输出

└── data/                 # 测试结果存储

    └── csvOutput/        # CSV格式测试结果

```


### 核心配置参数


`conf/config.properties`是测试的关键配置文件,主要参数说明如下:


```properties

# 1. 被测数据库配置

DB_SWITCH=IoTDB-200-SESSION_BY_TABLET  # 数据库类型及连接方式

HOST=127.0.0.1                          # 数据库地址

PORT=6667                               # 数据库端口

USERNAME=root                           # 用户名

PASSWORD=root                           # 密码

DB_NAME=test                            # 数据库名

<"5m.s6k3.org.cn"><"9z.s6k3.org.cn"><"2h.s6k3.org.cn">

# 2. 工作模式配置

BENCHMARK_WORK_MODE=testWithDefaultPath # 常规测试模式

# 其他可选模式:

# generateDataMode    - 生成模拟数据集

# verificationWriteMode - 正确性写入验证

# verificationQueryMode - 正确性查询验证

# serverMODE          - 服务器监控模式


# 3. 写入场景参数

CLIENT_NUMBER=10        # 并发客户端数

GROUP_NUMBER=20         # 存储组数量(仅IoTDB)

DEVICE_NUMBER=100       # 设备总数

SENSOR_NUMBER=300       # 每设备传感器数

BATCH_SIZE_PER_WRITE=100 # 每批写入数据行数

POINT_STEP=1000         # 数据点时间间隔(ms)

LOOP=86400              # 总操作次数


# 4. 操作比例配置(纯写入示例)

OPERATION_PROPORTION=1:0:0:0:0:0:0:0:0:0:0

# 格式:写:Q1:Q2:Q3:Q4:Q5:Q6:Q7:Q8:Q9:Q10


# 5. 数据类型比例

INSERT_DATATYPE_PROPORTION=1:1:1:1:1:1:0:0:0:0

# BOOLEAN:INT32:INT64:FLOAT:DOUBLE:TEXT:STRING:BLOB:TIMESTAMP:DATE

```


### 测试场景示例


根据上述配置,测试场景可描述为:10个并发客户端,向被测数据库写入100台设备×300个传感器的时序数据,数据时间间隔1秒,总操作次数86400次,预计生成约25.9亿个数据点。


## 执行测试


### 启动被测数据库


确保目标时序数据库已正常运行。以IoTDB为例:


```bash

# 启动IoTDB

start-iotdb.sh

```


### 执行测试


```bash

# Linux/Mac环境

./benchmark.sh


# Windows环境

benchmark.bat

```


测试过程中,控制台会实时显示写入速率、操作延迟等指标。如需服务器资源监控模式,可使用专用脚本:


```bash

./ser-benchmark.sh

```


## 测试结果分析


测试完成后,结果保存在`data/csvOutput`目录下,日志文件位于`logs`文件夹。


### 结果矩阵解读


典型的测试输出包含以下指标:


| 指标类别 | 指标名称 | 说明 |

|---------|---------|------|

| **操作结果** | OkOperation | 成功操作次数 |

| | OkPoint | 成功写入/查询的数据点数 |

| | FailOperation | 失败操作次数 |

| | FailPoint | 失败数据点数 |

| **延迟分布(ms)** | AVG | 平均操作延迟 |

| | MIN | 最小操作延迟 |

| | P25/P50/P75/P90/P95/P99 | 百分位延迟值 |


### 性能评估维度


基于测试结果,可从以下维度评估数据库性能:


1. **写入吞吐量**:每秒写入数据点数(points/sec),由`OkPoint / 总测试时间`计算得出

2. **查询延迟**:各类查询操作的P99延迟,反映系统在高负载下的响应能力

3. **资源消耗**:CPU、内存、磁盘I/O使用情况(需serverMODE采集)

4. **存储压缩比**:原始数据大小与数据库实际占用空间之比


### 实际案例分析


在TSBS(Time Series Benchmark Suite)的IoT场景测试中,不同数据库表现差异明显:

<"x7.s6k3.org.cn"><"b3.s6k3.org.cn"><"r9.s6k3.org.cn">

- **写入性能**:在同等硬件条件下,TDengine的写入吞吐量可达TimescaleDB的1.04~3.3倍,是InfluxDB的1.82~16.2倍

- **存储效率**:TimescaleDB的存储空间占用可达TDengine的11.6倍(大数据量场景)

- **查询响应**:复杂聚合查询中,TDengine的响应速度是TimescaleDB的5.1~23.3倍,是InfluxDB的21.2~68.7倍


这些数据表明,时序数据库的性能差异在规模效应下会被显著放大,选型时需结合实际业务规模进行评估。


## 高级用法


### 生成模拟数据集


如需保留测试数据集供后续验证,可使用数据生成模式:


```properties

BENCHMARK_WORK_MODE=generateDataMode

FILE_PATH=data/test        # 数据集保存路径

BIG_BATCH_SIZE=100         # 每文件包含的batch数

```


执行后生成的数据集包含:`info.txt`(配置信息)、`schema.txt`(元数据)、以及多个CSV数据文件。


### 正确性验证模式


对于需要验证数据写入准确性的场景,可分两步进行:


```properties

# 第一步:写入验证

BENCHMARK_WORK_MODE=verificationWriteMode

FILE_PATH=data/test


# 第二步:查询验证

BENCHMARK_WORK_MODE=verificationQueryMode

FILE_PATH=data/test

```


## 总结与建议


IoT-benchmark提供了一套标准化的时序数据库性能评估体系,从安装部署到结果分析均有完善支持。基于测试数据做选型决策时,建议关注以下几点:


1. **匹配业务场景**:根据实际数据规模、写入频率、查询模式调整测试参数,避免“万 能测试”脱离实际

2. **关注极端值**:P99延迟比平均延迟更能反映系统稳定性

3. **综合成本考量**:存储效率直接影响硬件投入,高压缩比的数据库长期运行成本更低

4. **持续验证**:业务发展后重新测试,确保数据库能力与需求同步增长


掌握IoT-benchmark的使用方法,意味着拥有了时序数据库选型的客观标尺。在数据驱动的决策时代,让测试数据说话,比任何宣传都更有说服力。


请使用浏览器的分享功能分享到微信等