TDengine 高效写入(High-Throughput)实践指南:JDBC 连接器百万级吞吐写入架构与性能调优 📅 发布时间:2026/9/14 22:23:49 👁 浏览次数: TDengine 高效写入High-Throughput实践指南JDBC 连接器百万级吞吐写入架构与性能调优【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengineTDengine 连接器提供高效写入特性通过自动创建后台写入线程与专属队列、按子表切分数据并批量发送帮助开发者以极低的学习成本构建百万行/秒级别的数据写入管道。本文以 高效写入官方文档 为主体结合仓库内 highvolume 示例工程 与 JDBC 驱动源码完整讲解高效写入的开启方式、配置参数、示例程序、性能关键要素与底层实现原理使读者能够直接复刻并调优自己的高性能写入方案。概述为什么需要高效写入为帮助用户轻松构建百万级吞吐量的数据写入管道TDengine 连接器提供高效写入的特性。启动高效写入特性后TDengine 连接器将自动创建写入线程与专属队列将数据按子表切分缓存在达到数据量阈值或超时条件时批量发送以此减少网络请求、提升吞吐量让用户无需掌握多线程编程知识和数据切分技巧即可实现高性能写入。从架构层面看这一特性把传统高性能写入所需的多线程 数据分片 背压控制三项能力全部下沉到连接器内部应用侧只需像调用普通 JDBC 参数绑定接口一样提交数据连接器按子表维度将数据路由到各自专属队列再由后台线程批量刷出网络往返次数大幅减少。JDBC 高效写入特性特性概述JDBC 驱动从v3.6.0起在 WebSocket 连接上提供高效写入特性。JDBC 驱动高效写入特性有如下特点支持 JDBC 标准参数绑定接口PreparedStatement开发者无需学习新的 API。在资源充分条件下写入能力跟写入线程数配置线性相关线程数越多吞吐越高。支持写入超时和连接断开重连后的重试次数和重试间隔配置。支持调用executeUpdate接口获取写入数据条数若写入有异常此时可捕获。本节内容假设用户已经熟悉 JDBC 标准参数绑定接口addBatch/executeBatch/PreparedStatement等。如何开启高效写入特性对于 JDBC 连接器来说有两种方式开启高效写入特性连接级别开启在连接属性上设置TSDBDriver.PROPERTY_KEY_ASYNC_WRITE为stmt或者在 JDBC URL 中增加asyncWritestmt即可在此连接上开启高效写入。连接上开启后后续所有创建的PreparedStatement都会使用高效写入模式。语句级别开启在参数绑定创建PreparedStatement所用的 SQL 中使用ASYNC_INSERT INTO而不是INSERT INTO则可以在这个参数绑定对象上开启高效写入。如何检查写入是否成功客户应用使用 JDBC 标准接口的addBatch添加一条记录用executeBatch提交所有添加记录。高效写入模式下可以使用executeUpdate方法来同步获取写入成功条数如果有数据写入失败此时调用executeUpdate会捕获到异常。在仓库示例 WSHighVolumeDemo.java 中可以看到这一用法每累计写入 50000 行后调用pstmt.executeUpdate()并用Assert.equals(50000, affectedRows)校验返回值——高效写入模式下executeUpdate的语义是同步返回上一次调用与本次调用之间写入的行数。高效写入重要配置参数配置项说明默认值生效条件TSDBDriver.PROPERTY_KEY_BACKEND_WRITE_THREAD_NUM后台写入线程数10仅 WebSocket 连接TSDBDriver.PROPERTY_KEY_BATCH_SIZE_BY_ROW单次批量写入的行数1000仅 WebSocket 连接TSDBDriver.PROPERTY_KEY_CACHE_SIZE_BY_ROW每个后台线程队列可缓存的行数10000仅 WebSocket 连接TSDBDriver.PROPERTY_KEY_ENABLE_AUTO_RECONNECT是否启用自动重连true/falsefalse仅 WebSocket 连接高效写入模式建议开启TSDBDriver.PROPERTY_KEY_RECONNECT_INTERVAL_MS自动重连重试间隔毫秒2000仅在自动重连开启时生效TSDBDriver.PROPERTY_KEY_RECONNECT_RETRY_COUNT自动重连重试次数3仅在自动重连开启时生效其他配置参数可参考 Properties。其中PROPERTY_KEY_ASYNC_WRITE对应 URL 参数asyncWrite目前仅支持stmt方式默认值为空即不启用。JDBC 高效写入使用样例下面是一个简单的使用 JDBC 高效写入的例子取自 WSHighVolumeDemo.java 的efficient_writing代码段说明了高效写入相关的配置和接口String url jdbc:TAOS-WS:// HOST : port /?userrootpasswordtaosdata; Properties properties new Properties(); // 开启高效写入模式 properties.setProperty(TSDBDriver.PROPERTY_KEY_ASYNC_WRITE, stmt); // 单次写请求中批量写入的最大行数 properties.setProperty(TSDBDriver.PROPERTY_KEY_BATCH_SIZE_BY_ROW, 10000); // 每个后台写入线程队列可缓存的最大行数 properties.setProperty(TSDBDriver.PROPERTY_KEY_CACHE_SIZE_BY_ROW, 100000); // 后台写入线程数 properties.setProperty(TSDBDriver.PROPERTY_KEY_BACKEND_WRITE_THREAD_NUM, 5); // 连接断开时自动重连 properties.setProperty(TSDBDriver.PROPERTY_KEY_ENABLE_AUTO_RECONNECT, true); // 写请求在服务端被处理的最大等待时间毫秒 properties.setProperty(TSDBDriver.PROPERTY_KEY_MESSAGE_WAIT_TIMEOUT, 5000); // 调用 addBatch 后修改二进制数据时是否拷贝数据 properties.setProperty(TSDBDriver.PROPERTY_KEY_COPY_DATA, false); // 是否校验子表名长度与变长数据类型长度 properties.setProperty(TSDBDriver.PROPERTY_KEY_STRICT_CHECK, false); properties.setProperty(TSDBDriver.PROPERTY_KEY_VARCHAR_AS_STRING, true); try (Connection conn DriverManager.getConnection(url, properties)) { // 若确定子表已存在可不在参数绑定中携带标签列以提升性能 String sql INSERT INTO power.meters (tbname, groupid, location, ts, current, voltage, phase) VALUES (?,?,?,?,?,?,?); try (PreparedStatement pstmt conn.prepareStatement(sql)) { for (int j 0; j NUM_OF_ROW; j) { for (int i 1; i NUM_OF_SUB_TABLE; i) { pstmt.setString(1, d_ i); pstmt.setInt(2, i); pstmt.setString(3, location_ i); pstmt.setTimestamp(4, new Timestamp(current j)); pstmt.setFloat(5, random.nextFloat() * 30); pstmt.setInt(6, random.nextInt(300)); pstmt.setFloat(7, random.nextFloat()); // 当后台队列缓存达到上限时此方法会阻塞 pstmt.addBatch(); rows; } pstmt.executeBatch(); if (rows % 50000 0) { // 高效写入模式下executeUpdate 同步返回上一次调用与本次调用之间写入的行数 int affectedRows pstmt.executeUpdate(); Assert.equals(50000, affectedRows); } } } }示例程序highvolume 工程场景设计下面的示例程序展示了如何高效写入数据场景设计如下TDengine 客户端程序从其它数据源不断读入数据在示例程序中采用生成模拟数据的方式来模拟读取数据源同时提供了从 Kafka 拉取数据写入 TDengine 的示例。为了提高 TDengine 客户端程序读取数据速度使用多线程读取。为了避免乱序多个读取线程读取数据对应的表集合应该不重叠。为了与每个数据读取线程读取数据的速度相匹配后台启用一组写入线程与之对应每个写入线程都有一个独占的固定大小的消息队列。示例代码位于 docs/examples/JDBC/highvolume假设源数据属于同一张超级表meters的不同子表。程序在开始写入数据之前已经在test库创建了这个超级表以及对应的子表。如果实际场景是多个超级表只需按需创建多个超级表和启动多组任务。程序清单类名功能说明FastWriteExample主程序完成命令行参数解析、线程池创建以及等待任务完成功能WorkTask从模拟源中读取数据调用 JDBC 标准接口写入MockDataSource模拟生成一定数量meters子表的数据StatTask统计写入速度并每隔 10 秒把当前写入速度打印到控制台CreateSubTableTask根据子表范围创建子表供主程序调用Meters提供meters表单条数据的序列化和反序列化供发送消息给 Kafka 和从 Kafka 接收消息使用ProducerTask生产者向 Kafka 发送消息ConsumerTask消费者从 Kafka 接收消息调用 JDBC 高效写入接口写入 TDengine并按进度提交 offsetUtil提供一些基础功能包括创建连接、创建 Kafka topic、统计写入条数等主程序命令行参数介绍-b,--batchSizeByRow arg 指定高效写入的 batchSizeByRow 参数默认 1000 -c,--cacheSizeByRow arg 指定高效写入的 cacheSizeByRow 参数默认 10000 -d,--dbName arg 指定数据库名, 默认 test --help 打印帮助信息 -K,--useKafka 使用 Kafka采用创建生产者发送消息消费者接收消息写入 TDengine 方式。否则采用工作线程订阅模拟器生成数据写入 TDengine 方式 -r,--readThreadCount arg 指定工作线程数默认 5当 Kafka 模式此参数同时决定生产者和消费者线程数 -R,--rowsPerSubTable arg 指定每子表写入行数默认 100 -s,--subTableNum arg 指定子表总数默认 1000000 -w,--writeThreadPerReadThread arg 指定每工作线程对应写入线程数默认 5JDBC URL 和 Kafka 集群地址配置JDBC URL 通过环境变量配置例如export TDENGINE_JDBC_URLjdbc:TAOS-WS://localhost:6041?userrootpasswordtaosdatavarcharAsStringtrueKafka 集群地址通过环境变量配置例如KAFKA_BOOTSTRAP_SERVERSlocalhost:9092使用方式1. 采用模拟数据写入方式java -jar highVolume.jar -r 5 -w 5 -b 10000 -c 100000 -s 1000000 -R 1000 2. 采用 Kafka 订阅写入方式java -jar highVolume.jar -r 5 -w 5 -b 10000 -c 100000 -s 1000000 -R 100 -K核心类源码解读FastWriteExample主程序负责解析命令行参数、创建子表、创建工作线程或 Kafka 生产者/消费者、统计写入速度、等待写入结束并释放资源。从源码FastWriteExample.java可以看到模拟数据模式下它按照readThreadCount将subTableNum张子表均分为互不重叠的区间为每个区间创建一个WorkTaskKafka 模式下则创建同样数量的ProducerTask与ConsumerTask并且注册了Runtime.addShutdownHook在CTRLC退出时调用forceStopAll()优雅停掉所有任务。WorkTask工作线程每个读任务关联一个模拟数据源不同数据源生成不同表的数据。工作线程采用阻塞方式调用 JDBC 标准接口addBatch——一旦对应高效写入后端队列满了写操作就会阻塞见 WorkTask.java从而天然形成从数据源到 TDengine 的背压链路不会因生产过快而把内存打爆。连接通过Util.getConnection(batchSizeByRow, cacheSizeByRow, writeThreadCount)创建。Util工具类其getConnection(int batchSize, int cacheSize, int writeThreadNum)方法集中展示了高效写入的配置方式——将PROPERTY_KEY_ASYNC_WRITE设为stmt、设置批大小、缓存大小、后台写入线程数并开启自动重连见 Util.java。prepareDatabase则创建vgroups 20的数据库与meters超级表。MockDataSource模拟数据源为了模拟真实情况采用轮流每个子表一条数据的生成方式index % (tableEndIndex - tableStartIndex 1)决定当前子表时间戳每轮递增 1000ms保证同一子表数据按时间升序见 MockDataSource.java。CreateSubTableTask建表任务根据子表范围创建子表采用批量拼接 SQL 的方式——每拼接 1000 个子表的create table if not exists d_N using meters tags(...)语句就执行一次显著减少建表请求次数见 CreateSubTableTask.java。ProducerTaskKafka 生产者消息生产者采用与 JDBC 高效写入不同的 Hash 方式ReqId.murmurHash32将同一子表的数据发送到同一个分区避免子表数据乱序同时设置batch.size1MB、linger.ms500来攒批见 ProducerTask.java。ConsumerTaskKafka 消费者从 Kafka 接收消息写入 TDengine关闭自动提交enable.auto.commitfalse将max.poll.records与高效写入批大小对齐每写入10*batchSizeByRow行调用一次executeUpdate()校验并commitSync()按进度提交 offset见 ConsumerTask.java。StatTask统计任务每 10 秒执行一次SELECT count(*)打印当前总行数与每秒写入速度speed(count-lastCount)/10见 StatTask.java。执行步骤本地集成开发环境执行示例程序clone TDengine 仓库如需 git clone可使用git clone https://gitcode.com/GitHub_Trending/tde/TDengine --depth 1。用集成开发环境打开docs/examples/JDBC/highvolume目录。在开发环境中配置环境变量TDENGINE_JDBC_URL。如果已配置了全局的环境变量TDENGINE_JDBC_URL可跳过这一步。如果要运行 Kafka 示例需要设置 Kafka 集群地址的环境变量KAFKA_BOOTSTRAP_SERVERS。指定命令行参数如-r 3 -w 3 -b 100 -c 1000 -s 1000 -R 100。运行类com.taos.example.highvolume.FastWriteExample。远程服务器上执行示例程序若要在服务器上执行示例程序可按照下面的步骤操作打包示例代码。在目录docs/examples/JDBC/highvolume下执行下面命令来生成highVolume.jarmvn package复制程序到服务器指定目录scp -r ./target/highVolume.jar userhost:~/dest-path配置环境变量。编辑~/.bash_profile或~/.bashrc添加如下内容export TDENGINE_JDBC_URLjdbc:TAOS-WS://localhost:6041?userrootpasswordtaosdatavarcharAsStringtrue以上使用的是本地部署 TDengine TSDB Server 时默认的 JDBC URL你需要根据自己的实际情况更改。如果想使用 Kafka 订阅模式请再增加 Kafka 集群环境变量配置export KAFKA_BOOTSTRAP_SERVERSlocalhost:9092用 Java 命令启动示例程序命令模板如果用 Kafka 订阅模式最后可以加上-Kjava -jar highVolume.jar -r 5 -w 5 -b 10000 -c 100000 -s 1000000 -R 1000结束测试程序。测试程序不会自动结束在获取到当前配置下稳定的写入速度后按CTRLC结束程序。下面是一次实际运行的日志输出机器配置 40 核 256G 固态硬盘-r 2 -w 10 -b 10000 -c 100000 -s 1000000 -R 100[INFO ] 2025-03-24 18:03:17.980 com.taos.example.highvolume.FastWriteExample main 309 main readThreadCount2, writeThreadPerReadThread10 batchSizeByRow10000 cacheSizeByRow100000, subTableNum1000000, rowsPerSubTable100 [INFO ] 2025-03-24 18:03:17.983 com.taos.example.highvolume.FastWriteExample main 312 main create database begin. [INFO ] 2025-03-24 18:03:34.499 com.taos.example.highvolume.FastWriteExample main 315 main create database end. [INFO ] 2025-03-24 18:03:34.500 com.taos.example.highvolume.FastWriteExample main 317 main create sub tables start. [INFO ] 2025-03-24 18:03:34.502 com.taos.example.highvolume.FastWriteExample createSubTables 73 main create sub table task started. [INFO ] 2025-03-24 18:03:55.777 com.taos.example.highvolume.FastWriteExample createSubTables 82 main create sub table task finished. [INFO ] 2025-03-24 18:03:55.778 com.taos.example.highvolume.FastWriteExample main 319 main create sub tables end. [INFO ] 2025-03-24 18:03:55.781 com.taos.example.highvolume.WorkTask run 41 FW-work-thread-2 started [INFO ] 2025-03-24 18:03:55.781 com.taos.example.highvolume.WorkTask run 41 FW-work-thread-1 started [INFO ] 2025-03-24 18:04:06.580 com.taos.example.highvolume.StatTask run 36 pool-1-thread-1 numberOfTable1000000 count12235906 speed1223590 [INFO ] 2025-03-24 18:04:17.531 com.taos.example.highvolume.StatTask run 36 pool-1-thread-1 numberOfTable1000000 count31185614 speed1894970 [INFO ] 2025-03-24 18:04:28.490 com.taos.example.highvolume.StatTask run 36 pool-1-thread-1 numberOfTable1000000 count51464904 speed2027929 [INFO ] 2025-03-24 18:04:40.851 com.taos.example.highvolume.StatTask run 36 pool-1-thread-1 numberOfTable1000000 count71498113 speed2003320 [INFO ] 2025-03-24 18:04:51.948 com.taos.example.highvolume.StatTask run 36 pool-1-thread-1 numberOfTable1000000 count91242103 speed1974399从日志可见2 个读线程、每读线程 10 个后台写入线程、批大小 10000 行、缓存 100000 行的配置下该机器稳定写入速度保持在约 200 万行/秒2003320 rows/s。写入性能关键要素客户端程序方面从客户端程序的角度来说高效写入数据要考虑以下几个因素批量写入通常情况下每批次写入的数据量越大越高效但超过一定阈值其优势会消失。使用 SQL 写入 TDengine 时尽量在单条 SQL 中拼接更多数据。当前单条 SQL 最大长度默认约为4MB4194304字符可通过客户端参数maxSQLLength配置上限为 64MB。多线程写入在系统资源未达瓶颈前写入线程数增加可提升吞吐量超过阈值后性能可能因服务端处理能力限制而下降。推荐为每个写入线程分配独立连接以减少连接资源的竞争。写入相邻性数据在不同表或子表之间的分布即要写入数据的相邻性。一般来说每批次只向同一张表或子表写入数据比向多张表或子表写入数据要更高效。提前建表提前建表可以提高写入性能因为后续不需要检查表是否存在且写入时可以不传标签列的数据提高性能。写入方式参数绑定写入比 SQL 写入更高效。因参数绑定方式避免了 SQL 解析。SQL 写入不自动建表比自动建表更高效。因自动建表要频繁检查表是否存在。SQL 写入比无模式写入更高效。因无模式写入会自动建表且支持动态更改表结构。避免乱序相同子表的数据需按时间戳升序提交。乱序数据会导致服务端执行额外的排序操作影响写入性能。开启压缩当网络带宽成为瓶颈或写入数据存在大量重复时启用压缩可有效提升整体性能。客户端程序要充分且恰当地利用以上几个因素。比如选择参数绑定写入方式提前建好子表在单次写入中尽量只向同一张表或子表写入数据每批次写入的数据量和并发写入的线程数经过测试和调优后设定为一个最适合当前系统处理能力的数值一般可以实现在当前系统中的最佳写入速度。在示例工程中这些因素均有对应体现Util.prepareDatabase提前建好超级表、CreateSubTableTask提前批量建子表、WorkTask用参数绑定写入、MockDataSource按时间升序生成数据、Util.getConnection中通过PROPERTY_KEY_ENABLE_AUTO_RECONNECTtrue为长时运行任务兜底。数据源方面客户端程序通常需要从数据源读取数据再写入 TDengine。从数据源角度来说以下几种情况需要在读线程和写线程之间增加队列有多个数据源单个数据源生成数据的速度远小于单线程写入的速度但数据量整体比较大。此时队列的作用是把多个数据源的数据汇聚到一起增加单次写入的数据量。单个数据源生成数据的速度远大于单线程写入的速度。此时队列的作用是增加写入的并发度。单张表的数据分散在多个数据源。此时队列的作用是将同一张表的数据提前汇聚到一起提高写入时数据的相邻性。如果写应用的数据源是 Kafka写应用本身即 Kafka 的消费者则可利用 Kafka 的特性实现高效写入。比如将同一张表的数据写到同一个 Topic 的同一个 Partition增加数据的相邻性示例中的ProducerTask正是通过 murmurHash 将同一子表消息固定路由到同一分区。通过订阅多个 Topic 实现数据汇聚。通过增加 Consumer 线程数增加写入的并发度。通过增加每次 Fetch 的最大数据量来增加单次写入的最大数据量示例中ConsumerTask将max.poll.records设为batchSizeByRowfetch.max.bytes设为 2MB。服务端配置方面首先看数据库建库参数中的几个重要性能相关参数vgroups创建数据库时需综合考虑系统内磁盘数量、磁盘 I/O 能力以及处理器能力合理设置 vgroups 数量从而充分挖掘系统性能潜力。若 vgroups 数量过少系统性能将难以充分释放若数量过多则会引发不必要的资源竞争。建议将每个 vgroup 中的表数量控制在 100 万以内在硬件资源充足的情况下控制在 1 万以内效果更佳。示例工程建库时即使用了vgroups 20见 Util.java。bufferbuffer 指的是为一个 vnode 分配的写入内存大小默认值为 256 MB。当 vnode 中实际写入的数据量达到 buffer 大小的约 1/3 时会触发数据落盘操作。适当调大该参数能够尽可能多地缓存数据实现一次性落盘提高写入效率。然而若参数配置过大在系统宕机恢复时恢复时间会相应变长。cachemodel用于控制是否在内存中缓存子表的最近数据。开启此功能会对写入性能产生一定影响因为在数据写入过程中系统会同步检查并更新每张表的 last_row 和每列的 last 值。可将原选项both调整为last_row或last_value以减轻对写入性能的影响。stt_trigger用于控制 TSDB 数据落盘策略以及触发后台合并文件的文件个数。企业版默认值为2开源版只能配置为1。当stt_trigger 1时适用于表数量少但写入频率高的场景当stt_trigger 1时更适合表数量多但写入频率低的场景。其他参数请参考 数据库。然后看taosd配置中的几个性能相关参数compressMsgSize对于带宽是瓶颈的情况开启 rpc 消息压缩可以提升性能。numOfCommitThreads服务端后台落盘线程个数默认为 4。落盘线程数并非越多越好。线程越多硬盘写入争抢越严重写入性能反而可能下降。配置了多块盘的服务器可以考虑将此参数放大从而利用多块硬盘的并发 IO 能力。日志级别以debugFlag为代表的一批参数控制相关日志输出级别。日志级别决定日志输出压力开的日志级别越高对写入性能的影响越大一般建议默认配置。其他参数请参考 taosd。高效写入实现原理通过上文的写入性能影响因素可知开发高性能数据写入程序需掌握多线程编程与数据切分技术存在一定技术门槛。为降低用户开发成本TDengine 连接器提供高效写入特性支持用户在不涉及底层线程管理与数据分片逻辑的前提下充分利用 TDengine 强大的写入能力。下面是连接器实现高效写入特性的原理图线程模型设计原理自动线程与队列创建连接器根据配置参数动态创建独立的写入线程及对应的写入队列每个队列与子表一一绑定形成子表数据 - 专属队列 - 独立线程的处理链路。数据分片与批量触发当应用写入数据时连接器自动按子表维度切分数据缓存至对应队列。当满足以下任一条件时触发批量发送队列数据量达到预设阈值对应PROPERTY_KEY_BATCH_SIZE_BY_ROW与PROPERTY_KEY_CACHE_SIZE_BY_ROW。达到预设的等待超时时间避免延迟过高。此机制通过减少网络请求次数显著提升写入吞吐量。功能优势单线程高性能写入应用层只需通过单线程调用写入接口连接器底层自动实现多线程并发处理性能可接近传统客户端多线程写入能力完全屏蔽底层线程管理复杂度。示例中的WorkTask便是单线程循环addBatch真正的并发由PROPERTY_KEY_BACKEND_WRITE_THREAD_NUM指定的后台线程完成。可靠性增强机制同步校验接口提供同步方法executeUpdate确保已提交数据的写入成功状态可追溯连接自愈能力支持连接断开后的自动重连PROPERTY_KEY_ENABLE_AUTO_RECONNECT结合超时重试策略可配置重试次数PROPERTY_KEY_RECONNECT_RETRY_COUNT与间隔PROPERTY_KEY_RECONNECT_INTERVAL_MS保障数据不丢失错误隔离设计单个队列或线程异常不影响其他子表的数据写入提升系统容错性。:::note 连接器高效写入特性仅支持写入超级表不支持写入普通表。 :::总结高效写入是 TDengine 面向工业物联网等高吞吐场景提供的关键连接器能力其核心价值在于把多线程 按子表分片 队列背压 批量刷盘这组复杂工程实践封装为两个开关asyncWritestmt或ASYNC_INSERT INTO和几个配置参数。配合本文梳理的客户端因素批量、多线程、相邻性、提前建表、写入方式、避免乱序、压缩、数据源因素队列与 Kafka 特性利用以及服务端因素vgroups、buffer、cachemodel、stt_trigger、numOfCommitThreads等读者可以按图索骥地复现 highvolume 示例工程 的百万行/秒级写入管线并在自己的业务规模与硬件条件下完成系统性调优。【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考