TDengine 压测利器 taosBenchmark 完全指南:从源码构建到写入/查询/订阅全功能压测
【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine
导读
taosBenchmark(曾用名 taosdemo)是 TDengine 生态中面向写入、查询、订阅等场景的全功能压力测试工具,可用于验证数据库的写入吞吐、查询性能与订阅链路稳定性。本文基于当前仓库 tools/taosBenchmark 官方文档及源码,完整讲解该工具的编译安装、命令行参数、JSON 配置文件结构与各场景实战用法,帮助你在本机快速搭建一套可复现的 TDengine 压测环境。
一、taosBenchmark 是什么
在 TDengine 仓库中,tools/taosBenchmark/README.md 明确指出:taosTools 是 TDengine 的辅助工具集合,而taosBenchmark(曾命名为 taosdemo)可以用于对 TDengine 进行全功能的写入、查询、订阅等功能的压力测试。
其版本发布方式发生过变化:
- 在 TDengine 2.4.0.7 及之前的版本,taosBenchmark 随 taosTools 安装包一起发布;
- 在后续版本中,taosBenchmark 被重新纳入 TDengine 标准安装包。
从仓库中 tools/taosBenchmark/VERSION 可以看到当前仓库内该工具的版本标识为taosbenchmark-3.3.1,属于 TDengine 3.x 系列配套工具。同一目录下还包含另一款工具taosdump(用于备份 TDengine 数据到本地目录、以及从本地目录恢复),但本文聚焦 taosBenchmark 的压测能力。
从源码结构看,taosBenchmark 被设计为四种测试模式,定义于 tools/taosBenchmark/inc/bench.h 的enum TEST_MODE:
| 模式 | 枚举值 | 用途 |
|---|---|---|
| INSERT_TEST | 0 | 写入压测(默认) |
| QUERY_TEST | 1 | 查询压测 |
| SUBSCRIBE_TEST | 2 | 数据订阅(TMQ)压测 |
| CSVFILE_TEST | 3 | 生成 CSV 数据文件 |
二、从源码构建 taosBenchmark
1. 安装依赖软件包
Ubuntu / Debian 系统
sudo apt install libjansson-dev libsnappy-dev liblzma-dev libz-dev zlib1g pkg-config libssl-dev gawkCentOS 7 / RHEL 系统
sudo yum install -y zlib-devel zlib-static xz-devel snappy-devel jansson jansson-devel pkgconfig libatomic libatomic-static libstdc++-static openssl-devel gawkCentOS 8 / Rocky Linux 系统
sudo yum install -y epel-release sudo yum install -y dnf-plugins-core sudo yum config-manager --set-enabled powertools sudo yum install -y zlib-devel zlib-static xz-devel snappy-devel jansson jansson-devel pkgconfig libatomic libatomic-static libstdc++-static openssl-devel gawk已知坑点说明:由于 snappy 缺乏 pkg-config 支持,cmake 会提示libsnappy not found,但这并不影响实际编译与运行,可以放心忽略该提示。
若因 CentOS 8 停止维护(EOL)导致部分软件包无法下载,可先执行以下命令切换到 vault 镜像源:
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*CentOS + devtoolset 系统
除上述依赖外,还需要高版本 GCC 工具链:
sudo yum install centos-release-scl sudo yum install devtoolset-9 devtoolset-9-libatomic-devel scl enable devtoolset-9 -- bashmacOS 系统(目前仅支持编译 taosBenchmark)
brew install argp-standalone gawk2. 安装 TDengine 客户端
taosBenchmark 依赖 TDengine 客户端库(taosc),因此编译前需要先安装 TDengine 客户端包,或直接编译安装本仓库源码。安装后通过taos_get_client_info()获取客户端版本,源码在 tools/taosBenchmark/src/benchMain.c 中会据此判断客户端主版本号,从而决定按 TDengine 3.x 还是 2.x 的行为路径初始化参数(见 benchCommandOpt.c 中initArgument()对taosc_version的设置)。
3. 克隆源码并编译
git clone https://github.com/taosdata/taos-tools cd taos-tools mkdir build cd build cmake .. make如需为 TDengine 2.x 构建兼容版本,在 cmake 阶段追加版本参数:
cmake .. -DTD_VER_COMPATIBLE=2.0.0.0 make4. 安装
sudo make install安装完成后,即可在命令行直接调用taosBenchmark二进制。构建系统由 tools/taosBenchmark/CMakeLists.txt 组织,它先构建deps下的依赖,再构建src下的主程序,产物输出到build/bin目录。
三、命令行参数一览
不传任何参数直接运行taosBenchmark会以默认的demo 模式执行一组内置的写入测试;传入 JSON 配置文件(-f)则进入完全由文件驱动的压测流程。源码 tools/taosBenchmark/src/benchSys.c 中定义了全部命令行选项,下表汇总了常用参数:
| 短选项 | 长选项 | 说明 | 默认值 |
|---|---|---|---|
-f | --file | JSON 配置文件路径,与其余命令行选项互斥 | 无 |
-c | --config-dir | 配置文件目录 | /etc/taos |
-h | --host | 连接的服务器 FQDN | localhost |
-P | --port | 连接端口 | 6030 |
-I | --interface | 写入模式:taosc / rest / stmt / stmt2 / sml | taosc |
-u | --user | 用户名 | root |
-p | --password | 密码 | taosdata |
-o | --output | 结果输出文件 | ./output.txt |
-j | --output-json-file | 结果输出 JSON 文件(可选) | 无 |
-T | --threads | 写入线程数 | 8 |
-i | --insert-interval | 交错模式下每次插入的间隔(毫秒) | 0 |
-S | --time-step | 时间戳步长(毫秒) | 1 |
-H | --angle-step | 角度步长(毫秒) | 1 |
-s | --start-timestamp | 起始时间戳 | 1500000000000(2017-07-14) |
-U | --supplement-insert | 仅补充写入、不创建库表 | 关闭 |
-B | --interlace-rows | 交错写入的行数 | 0 |
-r | --rec-per-req | 单次请求记录数 | 30000 |
-t | --tables | 子表数量 | 10000 |
-n | --records | 每张子表的记录数 | 10000 |
-d | --database | 数据库名 | test |
-l | --columns | INT 类型列数量 | 0 |
-L | --partial-col-num | 前 N 列有数据,其余为 NULL | 全部列 |
-A | --tag-type | 标签数据类型 | INT,BINARY(16) |
-b | --data-type | 列数据类型 | FLOAT,INT,FLOAT |
-w | --binwidth | nchar/binary 未指定时的默认长度 | 64 |
-m | --table-prefix | 子表名前缀 | d |
-E | --escape-character | 库表名使用转义字符 | 关闭 |
-C | --chinese | nchar/binary 生成中文数据 | 关闭 |
-N | --normal-table | 仅创建普通表、不创建超级表 | 关闭 |
-M | --random | 每个子表生成不同的随机数据(需较多内存) | 关闭 |
-x | --aggr-func | 插入后执行聚合函数查询 | 关闭 |
-y | --answer-yes | 自动确认提示 | 关闭 |
-R | --disorder-range | 乱序时间戳范围 | 1000 |
-O | --disorder | 乱序时间戳数据比例 | 0 |
-a | --replica | 建库副本数 | 1 |
-g | --debug | 调试模式 | 关闭 |
-G | --performance | 性能模式 | 关闭 |
-F | --prepared_rand | 随机数据源大小 | 20000 |
-v | --vgroups | 指定建库 VGroup 数(仅 daemon 3.0+) | 无 |
-k | --keep-trying | 写入失败后持续重试 | 关闭 |
-z | --trying-interval | 重试间隔 | 无 |
-Q | --nodrop | 不删除已存在数据库 | 关闭 |
-V | --version | 打印版本信息 | - |
-X | --dsn | 云服务 DSN 连接串 | 无 |
-Z | --driver | 指定驱动 | 无 |
上述默认值多数定义于 tools/taosBenchmark/inc/bench.h(如DEFAULT_NTHREADS、DEFAULT_CHILDTABLES、DEFAULT_PORT、DEFAULT_PREPARED_RAND、DEFAULT_REQ_PER_REQ等)。
四、写入压测:JSON 配置文件详解
复杂的压测场景(多库、多超级表、多种数据类型、函数生成、乱序数据等)必须使用 JSON 配置文件驱动。配置文件通过-f传入,filetype字段声明文件类型(insert/query/subscribe/csvfile)。
1. 全局连接与并发配置
以仓库自带的 tools/taosBenchmark/example/insert.json 为例:
{ "filetype": "insert", "cfgdir": "/etc/taos", "host": "127.0.0.1", "port": 6030, "user": "root", "password": "taosdata", "thread_count": 4, "create_table_thread_count": 1, "confirm_parameter_prompt": "no", "num_of_records_per_req": 10000, "prepared_rand": 10000, "chinese": "no", "escape_character": "yes", "continue_if_fail": "no", "databases": [] }各全局字段含义:
| 字段 | 说明 |
|---|---|
filetype | 配置文件类型,此处为insert |
cfgdir | 客户端配置文件目录,用于加载 taos.cfg |
host/port | 服务器地址与端口(原生连接默认 6030,REST 默认 6041) |
user/password | 连接认证信息 |
thread_count | 数据写入线程数 |
create_table_thread_count | 建表线程数 |
confirm_parameter_prompt | 是否交互确认参数(yes/no) |
num_of_records_per_req | 单条写入请求包含的记录数(注意默认配置中prepared_rand若小于该值,源码会自动将num_of_records_per_req下调至prepared_rand,见 benchMain.c) |
prepared_rand | 随机数据源大小,影响预生成的随机内存块 |
chinese | 是否生成中文字符串数据 |
escape_character | 建库建表时是否使用转义字符 |
continue_if_fail | 写入失败时是否继续 |
connection_pool_size | 连接池大小(见 insert-from-to.json) |
insert_interval | 交错模式插入间隔(毫秒) |
result_file | 结果统计输出文件 |
2. 数据库(dbinfo)配置
"databases": [ { "dbinfo": { "name": "test", "drop": "yes", "vgroups": 4, "precision": "ms" }, "super_tables": [] } ]dbinfo支持 TDengine 建库语句的核心参数,完整示例见 insertDemo.json 与 insert_csv.json:
| 字段 | 说明 |
|---|---|
name | 数据库名 |
drop | 是否先删除同名库(yes/no) |
vgroups | 指定 VGroup 数(3.0+) |
precision | 时间精度:ms(毫秒)等 |
replica | 副本数 |
duration | 单文件时长,如"5d" |
keep | 数据保留时长,如"30d"或天数 |
pages | 每 vnode 内存页数 |
minRows/maxRows | 文件块最小/最大行数 |
comp | 压缩算法选项 |
stt_trigger | 小文件触发落盘合并的阈值 |
wal_retention_period/wal_retention_size | WAL 保留时长/大小 |
cachemodel | 缓存模型,如"'both'" |
3. 超级表与子表配置
super_tables数组内定义每个超级表的结构与数据规模:
"super_tables": [ { "name": "meters", "child_table_exists": "no", "childtable_count": 10, "childtable_prefix": "d", "auto_create_table": "no", "data_source": "rand", "insert_mode": "taosc", "insert_rows": 10000, "timestamp_step": 10, "start_timestamp": "2020-10-01 00:00:00.000", "columns": [], "tags": [] } ]关键字段:
| 字段 | 说明 |
|---|---|
name | 超级表名 |
child_table_exists | 子表是否已存在(yes/no) |
childtable_count | 子表总数 |
childtable_prefix | 子表名前缀,子表名形如d0、d1 |
childtable_from/childtable_to | 只操作指定编号范围的子表(见 insert-from-to.json) |
auto_create_table | 是否自动建子表 |
batch_create_tbl_num | 批量建表数量 |
data_source | 数据来源:rand(随机生成)/sample(CSV 采样文件) |
insert_mode | 写入接口:taosc/rest/stmt/stmt2/sml |
line_protocol | 行协议(sml 模式):line/telnet/json |
insert_rows | 每张子表插入的记录数 |
timestamp_step | 时间戳步长(毫秒) |
start_timestamp | 起始时间戳,支持绝对时间或"now"(见 insertNow.json) |
interlace_rows | 交错写入行数 |
insert_interval | 每次插入间隔(毫秒) |
disorder_ratio/disorder_range | 乱序数据比例与乱序时间范围 |
partial_col_num/partial_col_from | 部分列写入:指定前 N 列有数据、其余为 NULL(见 insertFuns.json) |
sample_format/sample_file/tags_file | CSV 数据源格式、数据文件与标签文件(见 insert_csv.json) |
use_sample_ts | 是否使用采样文件中的时间戳 |
thread_bind_vgroup | 线程绑定 vgroup(见 insertSmall.json) |
non_stop_mode | 不间断写入模式 |
4. 列(columns)与标签(tags)定义
列定义支持指定类型、范围、数量与生成函数:
"columns": [ {"type": "FLOAT", "name": "current", "count": 1, "max": 12, "min": 8 }, { "type": "INT", "name": "voltage", "max": 225, "min": 215 }, { "type": "FLOAT", "name": "phase", "max": 1, "min": 0 } ], "tags": [ {"type": "TINYINT", "name": "groupid", "max": 10, "min": 1}, {"type": "BINARY", "name": "location", "len": 16, "values": ["San Francisco", "Los Angles", "San Diego", "San Jose", "Palo Alto", "Campbell", "Mountain View", "Sunnyvale", "Santa Clara", "Cupertino"] } ]字段说明:
type:数据类型。支持 BOOL、TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、BINARY、NCHAR、JSON、GEOMETRY、VARBINARY、DECIMAL 以及无符号整型(UINT、UBIGINT、UTINYINT、USMALLINT),见 sml_telnet.json 中的完整类型示例;name:列/标签名;min/max:数值生成的取值范围;count:批量生成的同类型列数量;len:BINARY/NCHAR 等变长类型的长度;values:标签取值的枚举列表(循环取值);fun:数据生成函数表达式(详见下一节);fillNull:是否填充 NULL(见 csv-export.json)。
从源码看,benchCommandOpt.c 使用正则解析带长度/精度参数的复杂类型:BINARY|NCHAR|VARCHAR|JSON|GEOMETRY|VARBINARY(n)以及DECIMAL(p,s),并对 DECIMAL 的 precision/scale 合法性做了校验(precision 不能超过TSDB_DECIMAL128_MAX_PRECISION,scale 必须满足0 <= s <= p)。
5. 用生成函数模拟真实波形
除随机数与取值范围外,列定义中的fun支持用函数表达式模拟真实传感器波形。仓库中 insertNow.json 给出了全部六类生成函数(类型枚举定义于 bench.h,表达式解析实现于 benchJsonOpt.c):
"columns": [ { "type": "FLOAT", "name": "current", "fun": "3*sin(x)+10*random(2)"}, { "type": "INT", "name": "voltage", "fun": "40*sin(x)+200*random(10)"}, { "type": "INT", "name": "c1", "fun": "count(0,100,1,0)"}, { "type": "INT", "name": "c2", "fun": "saw(-100,100,20,0)"}, { "type": "INT", "name": "c3", "fun": "square(0,60,20,10)"}, { "type": "INT", "name": "c4", "fun": "tri(-20,100,30,10)"} ]| 函数 | 形式 | 说明 |
|---|---|---|
sin(x) | amp*sin(x)+bias*random(n) | 正弦波叠加随机噪声 |
cos(x) | 同上 | 余弦波 |
count(min,max,step,offset) | 计数序列 | 从 min 按 step 递增到 max,offset 为偏移 |
saw(min,max,period,offset) | 锯齿波 | 在 min~max 间周期变化 |
square(min,max,period,offset) | 方波 | 周期跳变 |
tri(min,max,period,offset) | 三角波 | 线性上升下降 |
表达式支持倍数*函数 + 加数的组合形式,random(n)表示叠加 n 范围内的随机抖动。这类函数生成能力让压测数据更贴近工业物联网的真实采样特征(如电流/电压的波动曲线),相关示例还可见 insertDemo.json 与 insertFuns.json。
6. 不同写入接口(insert_mode)
通过insert_mode字段可以切换底层写入接口,枚举定义于 bench.h:
| 模式 | 说明 | 参考配置 |
|---|---|---|
taosc | 原生 C 客户端批量写入(默认) | insert.json |
rest | RESTful HTTP 接口写入(端口通常 6041) | insert-rest.json |
stmt/stmt2 | 参数绑定(prepared statement)写入 | 配置中直接指定 |
sml | Schemaless 写入,可配line_protocol为line(InfluxDB Line Protocol)、telnet、json | sml_telnet.json |
其中 REST 模式在 benchMain.c 中会额外做服务器地址转换与 Base64 认证编码,并探测 REST 服务器主版本;同时 REST 接口不支持线程绑定 vgroup(thread_bind_vgroup),使用时会直接报错提示改用 native 或 websocket 模式。
五、查询压测
查询压测通过filetype: "query"的配置文件驱动,支持指定表查询与超级表查询两类场景。
1. 指定表查询
tools/taosBenchmark/example/query.json:
{ "filetype": "query", "cfgdir": "/etc/taos", "host": "127.0.0.1", "port": 6030, "user": "root", "password": "taosdata", "confirm_parameter_prompt": "no", "continue_if_fail": "yes", "databases": "test", "query_times": 10, "query_mode": "taosc", "specified_table_query": { "threads": 3, "sqls": [ { "sql": "select last_row(*) from meters", "result": "./query_res0.txt" }, { "sql": "select count(*) from d0", "result": "./query_res1.txt" } ] } }字段说明:
| 字段 | 说明 |
|---|---|
databases | 查询目标数据库 |
query_times | 每条 SQL 重复执行的次数 |
query_mode | 查询连接方式:taosc等 |
specified_table_query.threads | 查询线程数 |
specified_table_query.sqls | SQL 列表,sql为查询语句,result为结果输出文件 |
2. SQL 文件批量查询
当 SQL 较多时,可写入文本文件并用sql_file引用,见 query-with-file.json:
"specified_table_query": { "query_interval": 1, "concurrent": 3, "sql_file": "./query-sqls.txt" }每行一条 SQL(参考 query-sqls.txt):
select last_row(*) from meters select count(*) from d0同时支持kill_slow_query_threshold(慢查询判定阈值秒数)与kill_slow_query_interval(检查间隔)两个字段,用于自动终止超时查询。
3. 超级表查询
tools/taosBenchmark/example/queryStb.json 演示了按超级表维度组织查询 SQL 的写法,super_table_query节点下通过stblname指定超级表名、threads指定线程数、sqls列出查询语句(SQL 中的xxxx会被替换为实际子表名)。
4. 插入后的自动聚合查询
使用命令行-x(--aggr-func)选项,可在插入完成后自动对全部数据执行*、count(*)、avg、sum、max、min、first、last等聚合查询并输出统计,聚合函数列表在 benchCommandOpt.c 中定义,demo 模式下使用g_aggreFuncDemo(针对current列),非 demo 模式使用g_aggreFunc(针对C0列)。
六、数据订阅(TMQ)压测
订阅压测基于 TDengine 的消息队列(TMQ)能力,配置文件的filetype为subscribe。仓库提供了两份等价配置:subscribe.json 与 tmq.json,核心结构如下:
{ "filetype": "subscribe", "cfgdir": "/etc/taos", "host": "127.0.0.1", "port": 6030, "user": "root", "password": "taosdata", "result_file": "tmq_res.txt", "tmq_info": { "concurrent": 3, "poll_delay": 100000, "group.id": "", "group_mode": "independent", "create_mode": "parallel", "client.id": "cliid_0001", "auto.offset.reset": "earliest", "enable.manual.commit": "false", "enable.auto.commit": "false", "auto.commit.interval.ms": 1000, "experimental.snapshot.enable": "false", "msg.with.table.name": "false", "rows_file": "rowfile", "topic_list": [ {"name": "topic1", "sql": "select * from test.meters;"} ] } }tmq_info中的关键订阅参数:
| 字段 | 说明 |
|---|---|
concurrent | 消费并发数 |
poll_delay | 轮询间隔(微秒) |
group.id | 消费组 ID(留空则自动生成) |
group_mode | 消费组模式,independent等 |
create_mode | 消费组创建方式,parallel |
client.id | 客户端标识 |
auto.offset.reset | 无提交位点时从何处开始消费(earliest/latest) |
enable.manual.commit/enable.auto.commit | 手动/自动提交偏移量开关 |
auto.commit.interval.ms | 自动提交间隔(毫秒) |
experimental.snapshot.enable | 是否启用快照 |
msg.with.table.name | 消息是否携带表名 |
topic_list | 订阅主题列表,name为主题名,sql为订阅的查询语句 |
订阅压测用于验证消息推送链路在高并发消费下的稳定性与延迟表现,是检验数据订阅/流处理前置环节的重要手段。
七、CSV 数据文件生成
filetype: "csvfile"模式用于只生成 CSV 数据文件而不连接数据库,生成的文本文件可用于后续的数据导入或作为其他工具的输入。csv-export.json 提供了完整示例:
{ "filetype": "csvfile", "output_path": "./csv/", "databases": [ { "dbinfo": { "name": "csvdb", "precision": "ms" }, "super_tables": [ { "name": "table", "childtable_count": 1010, "insert_rows": 1000, "childtable_prefix": "d", "timestamp_step": 1000000, "start_timestamp": "2020-10-01 00:00:00.000", "childtable_from": 1000, "childtable_to": 1010, "csv_file_prefix": "data", "csv_ts_format": "%Y%m%d", "csv_ts_interval": "1d", "csv_output_header": "true", "csv_tbname_alias": "device_id", "csv_compress_level": "none", "columns": [], "tags": [] } ] } ] }CSV 专属字段:
| 字段 | 说明 |
|---|---|
output_path | 输出目录 |
csv_file_prefix | 生成文件名前缀 |
csv_ts_format | 时间戳格式(如%Y%m%d) |
csv_ts_interval | 时间戳间隔(如1d) |
csv_output_header | 是否输出表头 |
csv_tbname_alias | 子表名列名别名 |
csv_compress_level | 压缩级别(如none) |
八、源码结构:快速定位实现
如果想深入理解 taosBenchmark 的实现,可按以下模块在仓库中定位(源码位于 tools/taosBenchmark/src):
| 文件 | 职责 |
|---|---|
| benchMain.c | 主入口:参数校验、JSON 加载、结果文件打开、SIGINT 优雅退出处理 |
| benchSys.c | 命令行选项定义与解析 |
| benchJsonOpt.c | JSON 配置文件解析、生成函数表达式解析 |
| benchCommandOpt.c | 数据类型解析、默认参数初始化、聚合查询线程 |
| benchInsert.c | 写入线程调度与内存估算 |
| benchQuery.c | 查询执行 |
| benchTmq.c | TMQ 订阅消费 |
| benchCsv.c | CSV 数据生成 |
| wrapDb.c | 对 taosc / REST 等客户端接口的统一封装 |
| bench.h | 数据结构、默认值、枚举与工具宏定义 |
主流程大致为:main()→ 解析命令行 → 加载 JSON(readJsonConfig)或应用命令行默认参数(modifyArgument)→ 校验参数(checkArgumentValid,见 benchMain.c)→ 按test_mode分发到写入/查询/订阅/CSV 四个执行路径。其中参数校验会检查prepared_rand与num_of_records_per_req的约束、REST 模式与bind_vgroup的互斥、以及批量查询(batch_query)对mixed_query的依赖关系。
九、典型使用流程小结
一个完整的压测流程通常如下:
- 编译安装taosBenchmark(依赖 → TDengine 客户端 →
cmake .. && make && sudo make install); - 启动目标 TDengine 集群(本机默认端口 6030);
- 写入压测:基于 insert.json 修改库表结构与数据规模,运行
taosBenchmark -f insert.json; - 查询压测:写入完成后,基于 query.json 组织压测 SQL,运行
taosBenchmark -f query.json; - 订阅压测:基于 subscribe.json 验证 TMQ 消费链路,运行
taosBenchmark -f subscribe.json; - 从
result_file输出文件中读取各阶段的吞吐量、耗时与失败统计,评估性能基线。
结语
taosBenchmark 作为 TDengine 官方压测工具,覆盖了写入(原生/REST/参数绑定/Schemaless 多接口)、查询(指定表/超级表/聚合)、订阅(TMQ)与 CSV 数据生成四大场景,配合 JSON 配置的精细化控制,足以支撑从单机功能验证到集群容量规划的各种测试需求。本文所述全部配置示例与默认值均可从当前仓库的 tools/taosBenchmark/example 目录与源码中直接查阅验证。
【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考