|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +title: "Apache-IoTDB6深入解析数据库管理操作增删改查与异构数据库实战指南" |
| 4 | +date: 2025-09-16T16:27:40+0800 |
| 5 | +description: "IoTDB时序数据库核心应用指南 本文系统介绍了Apache IoTDB在工业物联网中的关键应用技术。主要内容包括: 数据库管理:详细讲解数据库的创建、查询、删除操作及命名规范 TTL机制:解析自动数据清理功能,包括TTL设置、取消和查询方法 异构数据库构建:指导如何配置不同特性的数据库以满足多样化需求 实践技巧:提供设备模板构建、时间序列优化和路径查询等实用方法 文章特别强调数据库命名规范、TTL路径规则等关键注意事项,帮助开发者构建高可靠的时序数据管理体系。通过合理配置异构参数,可有效平衡查询性能和存储" |
| 6 | +keywords: "Apache IoTDB(6):深入解析数据库管理操作——增删改查与异构数据库实战指南" |
| 7 | +categories: ['未分类'] |
| 8 | +tags: ['时序数据库', '数据库管理', '数据库', 'Iotdb', 'Apache'] |
| 9 | +artid: "151722010" |
| 10 | +arturl: "https://blog.csdn.net/Dreamy_zsy/article/details/151722010" |
| 11 | +image: |
| 12 | + path: https://api.vvhan.com/api/bing?rand=sj&artid=151722010 |
| 13 | + alt: "Apache-IoTDB6深入解析数据库管理操作增删改查与异构数据库实战指南" |
| 14 | +render_with_liquid: false |
| 15 | +featuredImage: https://bing.ee123.net/img/rand?artid=151722010 |
| 16 | +featuredImagePreview: https://bing.ee123.net/img/rand?artid=151722010 |
| 17 | +cover: https://bing.ee123.net/img/rand?artid=151722010 |
| 18 | +image: https://bing.ee123.net/img/rand?artid=151722010 |
| 19 | +img: https://bing.ee123.net/img/rand?artid=151722010 |
| 20 | +--- |
| 21 | + |
| 22 | + |
| 23 | + |
| 24 | +# Apache IoTDB(6):深入解析数据库管理操作——增删改查与异构数据库实战指南 |
| 25 | + |
| 26 | + |
| 27 | + |
| 28 | +### 引言 |
| 29 | + |
| 30 | +本文将基于技术实践,从数据库管理、设备模板构建、时间序列优化到路径查询技巧,全面揭示IoTDB在工业物联网场景中的核心应用逻辑。帮助开发者构建高可靠、易扩展的时序数据管理体系。 |
| 31 | + |
| 32 | +**Apache IoTDB 时序数据库【系列篇章】**: |
| 33 | + |
| 34 | +| No. | 文章地址(点击进入) | |
| 35 | +| --- | --- | |
| 36 | +| 1 | [Apache IoTDB(1):时序数据库介绍与单机版安装部署指南](https://blog.csdn.net/Dreamy_zsy/article/details/149355595) | |
| 37 | +| 2 | [Apache IoTDB(2):时序数据库 IoTDB 集群安装部署的技术优势与适用场景分析](https://blog.csdn.net/Dreamy_zsy/article/details/149446348) | |
| 38 | +| 3 | [Apache IoTDB(3):时序数据库 IoTDB Docker部署从单机到集群的全场景部署与实践指南](https://blog.csdn.net/Dreamy_zsy/article/details/149901830) | |
| 39 | +| 4 | [Apache IoTDB(4):深度解析时序数据库 IoTDB 在Kubernetes 集群中的部署与实践指南](https://blog.csdn.net/Dreamy_zsy/article/details/149810323) | |
| 40 | +| 5 | [Apache IoTDB(5):深度解析时序数据库 IoTDB 中 AINode 工具的部署与实践](https://blog.csdn.net/Dreamy_zsy/article/details/151217513) | |
| 41 | + |
| 42 | +### 一、IoTDB 数据库管理——增删改查 |
| 43 | + |
| 44 | +#### 1.1 数据库管理介绍 |
| 45 | + |
| 46 | + |
| 47 | + |
| 48 | +数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,是关系型数据库管理系统(RDBMS)中的核心组成部分。它通过表格形式存储数据,支持SQL查询语言,提供数据完整性、安全性和并发控制等功能 |
| 49 | + |
| 50 | +#### 1.2 创建数据库 |
| 51 | + |
| 52 | +基于存储模型构建对应的数据库 |
| 53 | + |
| 54 | +**语句:** |
| 55 | + |
| 56 | +```sql |
| 57 | +IoTDB> CREATE DATABASE root.ln |
| 58 | + |
| 59 | +``` |
| 60 | + |
| 61 | +**注意**:Database 的父子节点都不能再设置 database。已经有root.ln了,我们创建下试下 |
| 62 | + |
| 63 | +错误提示: |
| 64 | + |
| 65 | +```sql |
| 66 | +IoTDB> CREATE DATABASE root.ln.wf01 |
| 67 | +Msg: 300: root.ln has already been created as database. |
| 68 | + |
| 69 | +``` |
| 70 | + |
| 71 | +**数据库命名规范(重点)** |
| 72 | + |
| 73 | +> 1. **节点名可由中英文字符、数字、下划线(_)、英文句号(.)、反引号(`) 组成** |
| 74 | +> 2. **若节点名为以下情况,则必须用反引号(`) 将整个名称包裹。** |
| 75 | +> **纯数字(如 12345)** |
| 76 | +> **含有特殊字符(如 . 或 _)并可能引发歧义的名称(如 db.01、_temp)** |
| 77 | +> 3. **反引号的特殊处理:** |
| 78 | +> **若节点名本身需要包含反引号(`),则需用两个反引号(``) 表示一个反引号。例如:命名为`db123``(本身包含一个反引号),需写为 `db123```** |
| 79 | +
|
| 80 | +#### 1.2 数据库查询 |
| 81 | + |
| 82 | +database 创建后,使用下面语句查询: |
| 83 | + |
| 84 | +```sql |
| 85 | +IoTDB> show databases |
| 86 | + |
| 87 | +``` |
| 88 | + |
| 89 | +返回结果: |
| 90 | + |
| 91 | +```text |
| 92 | ++-------------+----+-------------------------+-----------------------+-----------------------+ |
| 93 | +| database| ttl|schema_replication_factor|data_replication_factor|time_partition_interval| |
| 94 | ++-------------+----+-------------------------+-----------------------+-----------------------+ |
| 95 | +| root.sgcc|null| 2| 2| 604800| |
| 96 | +| root.ln|null| 2| 2| 604800| |
| 97 | ++-------------+----+-------------------------+-----------------------+-----------------------+ |
| 98 | +Total line number = 2 |
| 99 | +It costs 0.060s |
| 100 | +
|
| 101 | +``` |
| 102 | + |
| 103 | +#### 1.3 删除数据库 |
| 104 | + |
| 105 | +可以使用删除语句删除数据库。在删除的过程中,需要注意的是数据库的数据也会被删除(**慎重操作!**) |
| 106 | + |
| 107 | +语句: |
| 108 | + |
| 109 | +```sql |
| 110 | +IoTDB > DELETE DATABASE root.ln |
| 111 | + |
| 112 | +``` |
| 113 | + |
| 114 | +*删除所有数据,时间序列以及数据库(**非必要情况不要使用**)* |
| 115 | + |
| 116 | +```sql |
| 117 | +IoTDB > DELETE DATABASE root.** |
| 118 | + |
| 119 | +``` |
| 120 | + |
| 121 | +#### 1.4 统计数据库数量 |
| 122 | + |
| 123 | +**语句**: |
| 124 | + |
| 125 | +1. 遍历 |
| 126 | + |
| 127 | +```sql |
| 128 | +IoTDB> show databases |
| 129 | + |
| 130 | +``` |
| 131 | + |
| 132 | +2. 统计 |
| 133 | + |
| 134 | +```sql |
| 135 | +IoTDB> count databases |
| 136 | + |
| 137 | +``` |
| 138 | + |
| 139 | +结果: |
| 140 | +  |
| 141 | + |
| 142 | +### 二、IoTDB 数据库管理——TTL自动清除冗余数据 |
| 143 | + |
| 144 | +#### 2.1 数据保留时间(TTL) |
| 145 | + |
| 146 | +IoTDB 支持对 device 级别设置数据保留时间(TTL),这使得 IoTDB 可以定期、自动地删除一定时间之前的数据。合理使用 TTL可以帮助您控制 IoTDB 占用的总磁盘空间以避免出现磁盘写满等异常。并且,随着文件数量的增多,查询性能往往随之下降,内存占用也会有所提高。及时地删除一些较老的文件有助于使查询性能维持在一个较高的水平和减少内存资源的占用。相比其他需要手动清理的数据库,省去了很多麻烦 |
| 147 | + |
| 148 | +设置 TTL 时,系统会根据设置的路径寻找所包含的所有 device,并为这些 device 设置 TTL 时间,系统会按设备粒度对过期数据进行删除 |
| 149 | + |
| 150 | +> 需注意:是否过期判断依据的是数据点时间,不是写入时间 |
| 151 | +
|
| 152 | +数据删除有一定的延迟,但不影响查数,会在一定时间内删除。当设备数据过期后,将不能被查询到,但磁盘文件中的数据不能保证立即删除(会在一定时间内删除),但可以保证最终被删除 |
| 153 | + |
| 154 | +#### 2.2 TTL Path 规则 |
| 155 | + |
| 156 | +设置的路径 path 只支持前缀路径(即路径中间不能带 * , 且必须以 ** 结尾),该路径会匹配到设备,也允许用户指定不带星的 path 为具体的 database 或 device,当 path 不带 * 时,会检查是否匹配到 database,若匹配到 database,则会同时设置 path 和 path.**。 |
| 157 | + |
| 158 | +> 注意:设备 TTL 设置不会对元数据的存在性进行校验,即允许对一条不存在的设备设置 TTL |
| 159 | +
|
| 160 | +```text |
| 161 | +合格 path: |
| 162 | +root.** |
| 163 | +root.db.** |
| 164 | +root.db.group1.** |
| 165 | +root.db |
| 166 | +root.db.group1.d1 |
| 167 | +
|
| 168 | +不合格 path: |
| 169 | +root.*.db |
| 170 | +root.**.db.* |
| 171 | +root.db.* |
| 172 | +
|
| 173 | +``` |
| 174 | + |
| 175 | +#### 2.3 设置 TTL |
| 176 | + |
| 177 | +set ttl 操作可以理解为设置一条 TTL规则,比如 set ttl to root.sg.group1.** 就相当于对所有可以匹配到该路径模式的设备挂载 ttl。 unset ttl 操作表示对相应路径模式卸载 TTL,若不存在对应 TTL,则不做任何事。若想把 TTL 调成无限大,则可以使用 INF 关键字 |
| 178 | + |
| 179 | +设置 TTL 的 SQL 语句: |
| 180 | + |
| 181 | +```sql |
| 182 | +set ttl to pathPattern 360000; |
| 183 | + |
| 184 | +``` |
| 185 | + |
| 186 | +**需注意**: |
| 187 | + pathPattern 是前缀路径,即路径中间不能带 * 且必须以 ** 结尾。 |
| 188 | + pathPattern 匹配对应的设备。为了兼容老版本 SQL 语法,允许用户输入的 pathPattern 匹配到 db,则自动将前缀路径扩展为 path.** |
| 189 | + |
| 190 | +**举例**: |
| 191 | + 写set ttl to root.sg 360000 则会自动转化为set ttl to root.sg.** 360000,转化后的语句对所有 root.sg 下的 device 设置TTL。 |
| 192 | + 但若写的 pathPattern 无法匹配到 db,则上述逻辑不会生效 |
| 193 | + |
| 194 | +#### 2.4 取消 TTL |
| 195 | + |
| 196 | +语句: |
| 197 | + |
| 198 | +```sql |
| 199 | +IoTDB> unset ttl from root.ln |
| 200 | + |
| 201 | +``` |
| 202 | + |
| 203 | +取消设置 TTL 后, root.ln 路径下所有的数据都会被保存 |
| 204 | + |
| 205 | +```sql |
| 206 | +IoTDB> unset ttl from root.sgcc.** |
| 207 | + |
| 208 | +``` |
| 209 | + |
| 210 | +取消设置root.sgcc路径下的所有的 TTL |
| 211 | + |
| 212 | +```sql |
| 213 | +IoTDB> unset ttl from root.** |
| 214 | + |
| 215 | +``` |
| 216 | + |
| 217 | +#### 2.5 查询 TTL |
| 218 | + |
| 219 | +(1)列出所有的 TTL |
| 220 | + |
| 221 | +语句: |
| 222 | + |
| 223 | +```sql |
| 224 | +IoTDB> SHOW ALL TTL |
| 225 | + |
| 226 | +``` |
| 227 | + |
| 228 | +结果: |
| 229 | + |
| 230 | + |
| 231 | + |
| 232 | +(2)显示指定路径的 TTL |
| 233 | + |
| 234 | +语句: |
| 235 | + |
| 236 | +```sql |
| 237 | +show ttl on pathPattern |
| 238 | + |
| 239 | +``` |
| 240 | + |
| 241 | +结果: |
| 242 | + |
| 243 | + |
| 244 | + |
| 245 | +(3)显示设备的 TTL |
| 246 | + |
| 247 | +语句: |
| 248 | + |
| 249 | +```sql |
| 250 | +IoTDB> show devices |
| 251 | + |
| 252 | +``` |
| 253 | + |
| 254 | +结果: |
| 255 | + |
| 256 | + |
| 257 | + |
| 258 | +> 所有设备都一定会有 TTL,即不可能是 null。INF 表示无穷大 |
| 259 | +
|
| 260 | +### 三、IoTDB 数据库管理——构建异构数据库 |
| 261 | + |
| 262 | +#### 3.1 异构数据库的构建 |
| 263 | + |
| 264 | +我们熟悉 IoTDB 元数据建模的之后,可以在 IoTDB 中设置异构的数据库,以便应对不同的生产需求,这种异构设计能有效平衡查询性能(如实时分析)和存储成本(如历史归档)的关系 |
| 265 | + |
| 266 | +**在配置异构参数时注意事项有以下三点:** |
| 267 | + |
| 268 | +* TTL 和 TIME_PARTITION_INTERVAL 必须为正整数 |
| 269 | +* SCHEMA_REPLICATION_FACTOR 和 DATA_REPLICATION_FACTOR 必须小于等于已部署的 DataNode 数量 |
| 270 | +* SCHEMA_REGION_GROUP_NUM 和 DATA_REGION_GROUP_NUM 的功能与 iotdb-system.properties 配置文件中的 |
| 271 | + schema_region_group_extension_policy 和 data_region_group_extension_policy 参数相关 |
| 272 | + |
| 273 | +#### 3.2 数据库异构参数 |
| 274 | + |
| 275 | +| 参数名 | 参数类型 | 参数描述 | |
| 276 | +| --- | --- | --- | |
| 277 | +| TTL | Long | 数据库的 TTL | |
| 278 | +| SCHEMA_REPLICATION_FACTOR | Integer | 数据库的元数据副本数 | |
| 279 | +| DATA_REPLICATION_FACTOR | Integer | 数据库的数据副本数 | |
| 280 | +| SCHEMA_REGION_GROUP_NUM | Integer | 数据库的 SchemaRegionGroup 数量 | |
| 281 | +| DATA_REGION_GROUP_NUM | Integer | 数据库的 DataRegionGroup 数量 | |
| 282 | + |
| 283 | +可以在创建 Database 时设置任意异构参数,或在单机/分布式 IoTDB 运行时调整部分异构参数 |
| 284 | + |
| 285 | +#### 3.3 创建 Database 时设置异构参数 |
| 286 | + |
| 287 | +语法: |
| 288 | + |
| 289 | +```sql |
| 290 | +CREATE DATABASE prefixPath (WITH databaseAttributeClause (COMMA? databaseAttributeClause)*)? |
| 291 | + |
| 292 | +``` |
| 293 | + |
| 294 | +例如: |
| 295 | + |
| 296 | +```sql |
| 297 | +CREATE DATABASE root.db WITH SCHEMA_REPLICATION_FACTOR=1, DATA_REPLICATION_FACTOR=3, SCHEMA_REGION_GROUP_NUM=1, DATA_REGION_GROUP_NUM=2; |
| 298 | + |
| 299 | +``` |
| 300 | + |
| 301 | +**运行时调整异构参数** |
| 302 | + |
| 303 | +可以在 IoTDB 运行时调整部分异构参数 |
| 304 | + |
| 305 | +语法: |
| 306 | + |
| 307 | +```sql |
| 308 | +ALTER DATABASE prefixPath WITH databaseAttributeClause (COMMA? databaseAttributeClause)* |
| 309 | + |
| 310 | +``` |
| 311 | + |
| 312 | +例如: |
| 313 | + |
| 314 | +```sql |
| 315 | +ALTER DATABASE root.db WITH SCHEMA_REGION_GROUP_NUM=1, DATA_REGION_GROUP_NUM=2; |
| 316 | + |
| 317 | +``` |
| 318 | + |
| 319 | +> **注意:运行时只能调整下列异构参数**: |
| 320 | +> |
| 321 | +> * **SCHEMA_REGION_GROUP_NUM** |
| 322 | +> * **DATA_REGION_GROUP_NUM** |
| 323 | +
|
| 324 | +#### 3.4 查询每个 Database 具体异构配置 |
| 325 | + |
| 326 | +语法: |
| 327 | + |
| 328 | +```sql |
| 329 | +SHOW DATABASES DETAILS prefixPath? |
| 330 | + |
| 331 | +``` |
| 332 | + |
| 333 | +例如: |
| 334 | + |
| 335 | +```text |
| 336 | +IoTDB> SHOW DATABASES DETAILS |
| 337 | ++--------+--------+-----------------------+---------------------+---------------------+--------------------+-----------------------+-----------------------+------------------+---------------------+---------------------+ |
| 338 | +|Database| TTL|SchemaReplicationFactor|DataReplicationFactor|TimePartitionInterval|SchemaRegionGroupNum|MinSchemaRegionGroupNum|MaxSchemaRegionGroupNum|DataRegionGroupNum|MinDataRegionGroupNum|MaxDataRegionGroupNum| |
| 339 | ++--------+--------+-----------------------+---------------------+---------------------+--------------------+-----------------------+-----------------------+------------------+---------------------+---------------------+ |
| 340 | +|root.db1| null| 1| 3| 604800000| 0| 1| 1| 0| 2| 2| |
| 341 | +|root.db2|86400000| 1| 1| 604800000| 0| 1| 1| 0| 2| 2| |
| 342 | +|root.db3| null| 1| 1| 604800000| 0| 1| 1| 0| 2| 2| |
| 343 | ++--------+--------+-----------------------+---------------------+---------------------+--------------------+-----------------------+-----------------------+------------------+---------------------+---------------------+ |
| 344 | +Total line number = 3 |
| 345 | +It costs 0.058s |
| 346 | +
|
| 347 | +``` |
| 348 | + |
| 349 | +查询出的结果,根据每列所对应的信息博主统计并列出,如下: |
| 350 | + |
| 351 | +> 数据库名称 |
| 352 | +> 数据库的 TTL |
| 353 | +> 数据库的元数据副本数 |
| 354 | +> 数据库的数据副本数 |
| 355 | +> 数据库的时间分区间隔 |
| 356 | +> 数据库当前拥有的 SchemaRegionGroup 数量 |
| 357 | +> 数据库需要拥有的最小 SchemaRegionGroup 数量 |
| 358 | +> 数据库允许拥有的最大 SchemaRegionGroup 数量 |
| 359 | +> 数据库当前拥有的 DataRegionGroup 数量 |
| 360 | +> 数据库需要拥有的最小 DataRegionGroup 数量 |
| 361 | +> 数据库允许拥有的最大 DataRegionGroup 数量 |
| 362 | +
|
| 363 | +### 四、结语 |
| 364 | + |
| 365 | + |
| 366 | + |
| 367 | +**Apache IoTDB** 时序数据库以其高吞吐、高压缩、树模型、端边云协同等独特优势,正在成为工业场景下的“隐形冠军”。对于技术博主、架构师、数据开发工程师而言,掌握 IoTDB,不仅是技术升级,更是认知升级。本文详细讲述了IoTDB 数据库管理操作增删改查与异构数据库,后续博主会详细的介绍 IoTDB 设备管理以及时间序列管理等 |
| 368 | + |
| 369 | + |
| 370 | + |
0 commit comments