Apache IoTDB(6):深入解析数据库管理操作——增删改查与异构数据库实战指南

Apache IoTDB(6):深入解析数据库管理操作——增删改查与异构数据库实战指南

目录

引言

本文将基于技术实践,从数据库管理、设备模板构建、时间序列优化到路径查询技巧,全面揭示IoTDB在工业物联网场景中的核心应用逻辑。帮助开发者构建高可靠、易扩展的时序数据管理体系。

Apache IoTDB 时序数据库【系列篇章】

No.文章地址(点击进入)
1Apache IoTDB(1):时序数据库介绍与单机版安装部署指南
2Apache IoTDB(2):时序数据库 IoTDB 集群安装部署的技术优势与适用场景分析
3Apache IoTDB(3):时序数据库 IoTDB Docker部署从单机到集群的全场景部署与实践指南
4Apache IoTDB(4):深度解析时序数据库 IoTDB 在Kubernetes 集群中的部署与实践指南
5Apache IoTDB(5):深度解析时序数据库 IoTDB 中 AINode 工具的部署与实践

一、IoTDB 数据库管理——增删改查

1.1 数据库管理介绍

在这里插入图片描述

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,是关系型数据库管理系统(RDBMS)中的核心组成部分。它通过表格形式存储数据,支持SQL查询语言,提供数据完整性、安全性和并发控制等功能

1.2 创建数据库

基于存储模型构建对应的数据库

语句:

IoTDB>CREATEDATABASE root.ln 

注意:Database 的父子节点都不能再设置 database。已经有root.ln了,我们创建下试下

错误提示:

IoTDB>CREATEDATABASE root.ln.wf01 Msg: 300: root.ln has already been created asdatabase.

数据库命名规范(重点)

节点名可由中英文字符、数字、下划线(_)、英文句号(.)、反引号(`) 组成若节点名为以下情况,则必须用反引号(`) 将整个名称包裹。
纯数字(如 12345)
含有特殊字符(如 . 或 _)并可能引发歧义的名称(如 db.01、_temp)
反引号的特殊处理:
若节点名本身需要包含反引号(`),则需用两个反引号(``) 表示一个反引号。例如:命名为`db123``(本身包含一个反引号),需写为 `db123```

1.2 数据库查询

database 创建后,使用下面语句查询:

IoTDB>showdatabases

返回结果:

+-------------+----+-------------------------+-----------------------+-----------------------+ | database| ttl|schema_replication_factor|data_replication_factor|time_partition_interval| +-------------+----+-------------------------+-----------------------+-----------------------+ | root.sgcc|null| 2| 2| 604800| | root.ln|null| 2| 2| 604800| +-------------+----+-------------------------+-----------------------+-----------------------+ Total line number = 2 It costs 0.060s 

1.3 删除数据库

可以使用删除语句删除数据库。在删除的过程中,需要注意的是数据库的数据也会被删除(慎重操作!

语句:

IoTDB >DELETEDATABASE root.ln 

删除所有数据,时间序列以及数据库(非必要情况不要使用

IoTDB >DELETEDATABASE root.**

1.4 统计数据库数量

语句

  1. 遍历
IoTDB>showdatabases
  1. 统计
IoTDB> count databases

结果:

在这里插入图片描述

二、IoTDB 数据库管理——TTL自动清除冗余数据

2.1 数据保留时间(TTL)

IoTDB 支持对 device 级别设置数据保留时间(TTL),这使得 IoTDB 可以定期、自动地删除一定时间之前的数据。合理使用 TTL可以帮助您控制 IoTDB 占用的总磁盘空间以避免出现磁盘写满等异常。并且,随着文件数量的增多,查询性能往往随之下降,内存占用也会有所提高。及时地删除一些较老的文件有助于使查询性能维持在一个较高的水平和减少内存资源的占用。相比其他需要手动清理的数据库,省去了很多麻烦

设置 TTL 时,系统会根据设置的路径寻找所包含的所有 device,并为这些 device 设置 TTL 时间,系统会按设备粒度对过期数据进行删除

需注意:是否过期判断依据的是数据点时间,不是写入时间

数据删除有一定的延迟,但不影响查数,会在一定时间内删除。当设备数据过期后,将不能被查询到,但磁盘文件中的数据不能保证立即删除(会在一定时间内删除),但可以保证最终被删除

2.2 TTL Path 规则

设置的路径 path 只支持前缀路径(即路径中间不能带 * , 且必须以 ** 结尾),该路径会匹配到设备,也允许用户指定不带星的 path 为具体的 database 或 device,当 path 不带 * 时,会检查是否匹配到 database,若匹配到 database,则会同时设置 path 和 path.**。

注意:设备 TTL 设置不会对元数据的存在性进行校验,即允许对一条不存在的设备设置 TTL
合格 path: root.** root.db.** root.db.group1.** root.db root.db.group1.d1 不合格 path: root.*.db root.**.db.* root.db.* 

2.3 设置 TTL

set ttl 操作可以理解为设置一条 TTL规则,比如 set ttl to root.sg.group1.** 就相当于对所有可以匹配到该路径模式的设备挂载 ttl。 unset ttl 操作表示对相应路径模式卸载 TTL,若不存在对应 TTL,则不做任何事。若想把 TTL 调成无限大,则可以使用 INF 关键字

设置 TTL 的 SQL 语句:

set ttl to pathPattern 360000;

需注意
pathPattern 是前缀路径,即路径中间不能带 * 且必须以 ** 结尾。
pathPattern 匹配对应的设备。为了兼容老版本 SQL 语法,允许用户输入的 pathPattern 匹配到 db,则自动将前缀路径扩展为 path.**

举例
写set ttl to root.sg 360000 则会自动转化为set ttl to root.sg.** 360000,转化后的语句对所有 root.sg 下的 device 设置TTL。
但若写的 pathPattern 无法匹配到 db,则上述逻辑不会生效

2.4 取消 TTL

语句:

IoTDB> unset ttl from root.ln 

取消设置 TTL 后, root.ln 路径下所有的数据都会被保存

IoTDB> unset ttl from root.sgcc.**

取消设置root.sgcc路径下的所有的 TTL

IoTDB> unset ttl from root.**

2.5 查询 TTL

(1)列出所有的 TTL

语句:

IoTDB>SHOWALL TTL 

结果:

在这里插入图片描述

(2)显示指定路径的 TTL

语句:

show ttl on pathPattern 

结果:

在这里插入图片描述

(3)显示设备的 TTL

语句:

IoTDB>show devices 

结果:

在这里插入图片描述
所有设备都一定会有 TTL,即不可能是 null。INF 表示无穷大

三、IoTDB 数据库管理——构建异构数据库

3.1 异构数据库的构建

我们熟悉 IoTDB 元数据建模的之后,可以在 IoTDB 中设置异构的数据库,以便应对不同的生产需求,这种异构设计能有效平衡查询性能(如实时分析)和存储成本(如历史归档)的关系

在配置异构参数时注意事项有以下三点:

  • TTL 和 TIME_PARTITION_INTERVAL 必须为正整数
  • SCHEMA_REPLICATION_FACTOR 和 DATA_REPLICATION_FACTOR 必须小于等于已部署的 DataNode 数量
  • SCHEMA_REGION_GROUP_NUM 和 DATA_REGION_GROUP_NUM 的功能与 iotdb-system.properties 配置文件中的
    schema_region_group_extension_policy 和 data_region_group_extension_policy 参数相关

3.2 数据库异构参数

参数名参数类型参数描述
TTLLong数据库的 TTL
SCHEMA_REPLICATION_FACTORInteger数据库的元数据副本数
DATA_REPLICATION_FACTORInteger数据库的数据副本数
SCHEMA_REGION_GROUP_NUMInteger数据库的 SchemaRegionGroup 数量
DATA_REGION_GROUP_NUMInteger数据库的 DataRegionGroup 数量

可以在创建 Database 时设置任意异构参数,或在单机/分布式 IoTDB 运行时调整部分异构参数

3.3 创建 Database 时设置异构参数

语法:

CREATEDATABASE prefixPath (WITH databaseAttributeClause (COMMA? databaseAttributeClause)*)? 

例如:

CREATEDATABASE root.db WITH SCHEMA_REPLICATION_FACTOR=1, DATA_REPLICATION_FACTOR=3, SCHEMA_REGION_GROUP_NUM=1, DATA_REGION_GROUP_NUM=2;

运行时调整异构参数

可以在 IoTDB 运行时调整部分异构参数

语法:

ALTERDATABASE prefixPath WITH databaseAttributeClause (COMMA? databaseAttributeClause)*

例如:

ALTERDATABASE root.db WITH SCHEMA_REGION_GROUP_NUM=1, DATA_REGION_GROUP_NUM=2;
注意:运行时只能调整下列异构参数SCHEMA_REGION_GROUP_NUMDATA_REGION_GROUP_NUM

3.4 查询每个 Database 具体异构配置

语法:

SHOWDATABASES DETAILS prefixPath? 

例如:

IoTDB> SHOW DATABASES DETAILS +--------+--------+-----------------------+---------------------+---------------------+--------------------+-----------------------+-----------------------+------------------+---------------------+---------------------+ |Database| TTL|SchemaReplicationFactor|DataReplicationFactor|TimePartitionInterval|SchemaRegionGroupNum|MinSchemaRegionGroupNum|MaxSchemaRegionGroupNum|DataRegionGroupNum|MinDataRegionGroupNum|MaxDataRegionGroupNum| +--------+--------+-----------------------+---------------------+---------------------+--------------------+-----------------------+-----------------------+------------------+---------------------+---------------------+ |root.db1| null| 1| 3| 604800000| 0| 1| 1| 0| 2| 2| |root.db2|86400000| 1| 1| 604800000| 0| 1| 1| 0| 2| 2| |root.db3| null| 1| 1| 604800000| 0| 1| 1| 0| 2| 2| +--------+--------+-----------------------+---------------------+---------------------+--------------------+-----------------------+-----------------------+------------------+---------------------+---------------------+ Total line number = 3 It costs 0.058s 

查询出的结果,根据每列所对应的信息博主统计并列出,如下:

数据库名称
数据库的 TTL
数据库的元数据副本数
数据库的数据副本数
数据库的时间分区间隔
数据库当前拥有的 SchemaRegionGroup 数量
数据库需要拥有的最小 SchemaRegionGroup 数量
数据库允许拥有的最大 SchemaRegionGroup 数量
数据库当前拥有的 DataRegionGroup 数量
数据库需要拥有的最小 DataRegionGroup 数量
数据库允许拥有的最大 DataRegionGroup 数量

四、结语

在这里插入图片描述

Apache IoTDB 时序数据库以其高吞吐、高压缩、树模型、端边云协同等独特优势,正在成为工业场景下的“隐形冠军”。对于技术博主、架构师、数据开发工程师而言,掌握 IoTDB,不仅是技术升级,更是认知升级。本文详细讲述了IoTDB 数据库管理操作增删改查与异构数据库,后续博主会详细的介绍 IoTDB 设备管理以及时间序列管理等

Read more

将现有 REST API 转换为 MCP Server工具 -higress

将现有 REST API 转换为 MCP Server工具 -higress

Higress 是一款云原生 API 网关,集成了流量网关、微服务网关、安全网关和 AI 网关的功能。 它基于 Istio 和 Envoy 开发,支持使用 Go/Rust/JS 等语言编写 Wasm 插件。 提供了数十个通用插件和开箱即用的控制台。 Higress AI 网关支持多种 AI 服务提供商,如 OpenAI、DeepSeek、通义千问等,并具备令牌限流、消费者鉴权、WAF 防护、语义缓存等功能。 MCP Server 插件配置 higress 功能说明 * mcp-server 插件基于 Model Context Protocol (MCP),专为 AI 助手设计,

By Ne0inhk
MCP 工具速成:npx vs. uvx 全流程安装指南

MCP 工具速成:npx vs. uvx 全流程安装指南

在现代 AI 开发中,Model Context Protocol(MCP)允许通过外部进程扩展模型能力,而 npx(Node.js 生态)和 uvx(Python 生态)则是两种即装即用的客户端工具,帮助你快速下载并运行 MCP 服务器或工具包,无需全局安装。本文将从原理和对比入手,提供面向 Windows、macOS、Linux 的详细安装、验证及使用示例,确保你能在本地或 CI/CD 流程中无缝集成 MCP 服务器。 1. 工具简介 1.1 npx(Node.js/npm) npx 是 npm CLI(≥v5.2.0)

By Ne0inhk
解锁Dify与MySQL的深度融合:MCP魔法开启数据新旅程

解锁Dify与MySQL的深度融合:MCP魔法开启数据新旅程

文章目录 * 解锁Dify与MySQL的深度融合:MCP魔法开启数据新旅程 * 引言:技术融合的奇妙开篇 * 认识主角:Dify、MCP 与 MySQL * (一)Dify:大语言模型应用开发利器 * (二)MCP:连接的桥梁 * (三)MySQL:经典数据库 * 准备工作:搭建融合舞台 * (一)环境搭建 * (二)安装与配置 Dify * (三)安装与配置 MySQL * 关键步骤:Dify 与 MySQL 的牵手过程 * (一)安装必要插件 * (二)配置 MCP SSE * (三)创建 Dify 工作流 * (四)配置 Agent 策略 * (五)搭建MCP

By Ne0inhk
如何在Cursor中使用MCP服务

如何在Cursor中使用MCP服务

前言 随着AI编程助手的普及,越来越多开发者选择在Cursor等智能IDE中进行高效开发。Cursor不仅支持代码补全、智能搜索,还能通过MCP(Multi-Cloud Platform)服务,轻松调用如高德地图API、数据库等多种外部服务,实现数据采集、处理和自动化办公。 本文以“北京一日游自动化攻略”为例,详细讲解如何在 Cursor 中使用 MCP 服务,完成数据采集、数据库操作、文件生成和前端页面展示的全流程。 学习视频:cursor中使用MCP服务 一、什么是MCP服务? MCP(Multi-Cloud Platform)是Cursor内置的多云服务接口,支持调用地图、数据库、文件系统等多种API。通过MCP,开发者无需手动写HTTP请求或繁琐配置,只需在对话中描述需求,AI助手即可自动调用相关服务,极大提升开发效率。 二、环境准备 2.1 cursor Cursor重置机器码-解决Too many free trials. 2.

By Ne0inhk