数据库管理
数据库管理
在表模型中,数据库是表的上层组织结构,用于管理一组业务相关的表。创建表、写入数据或查询数据前,通常需要先创建数据库,并通过 USE <DATABASE_NAME> 指定当前会话使用的数据库。
数据库可以设置 TTL、时间分区间隔、SchemaRegionGroup 数量和 DataRegionGroup 数量等属性。其中 TTL 会作为数据库下表的默认数据保留周期;如果表单独设置了 TTL,则以表级 TTL 为准。
1. 基础概念
1.1 数据库
数据库用于组织和管理多张表。通常可以按业务域、项目、租户或数据隔离需求划分数据库。例如,将同一业务系统的一组设备表放在同一个数据库中,便于统一管理生命周期、权限和查询空间。
在表模型中,数据库名称也是表的命名空间。执行 USE database1 后,后续未显式指定数据库名的表操作会默认作用于 database1。
1.2 TTL
TTL 用于指定数据保存时间,单位为毫秒。超过 TTL 的数据会被自动过期删除。合理设置 TTL 可以控制磁盘空间占用,避免历史数据持续累积影响存储成本和查询性能。
TTL 可以在数据库级别设置,也可以在表级别设置。如需了解更详细的功能介绍可查阅:数据保留时间。
1.3 时间分区间隔
时间分区间隔决定数据在磁盘上按多长时间进行目录分组,默认值为 604800000 ms,即 1 周。通常采用默认值即可。
1.4 RegionGroup
IoTDB 会将元数据和数据划分为 Region,并由 DataNode 管理。数据库级属性中的 SCHEMA_REGION_GROUP_NUM 和 DATA_REGION_GROUP_NUM 分别用于表示元数据副本组和数据副本组数量,一般不需要手动修改。
2. 数据库管理
2.1 创建数据库
用于创建数据库。
语法:
CREATE DATABASE (IF NOT EXISTS)? <DATABASE_NAME> (WITH properties)?说明:
<DATABASE_NAME> 数据库名称,具有以下特性:
- 大小写不敏感,创建成功后,统一显示为小写
- 名称的长度不得超过 64 个字符。
- 名称中包含下划线(_)、数字(非开头)、英文字母可以直接创建
- 名称中包含特殊字符(如`)、中文字符、数字开头时,必须用双引号 "" 括起来。
WITH properties 子句可配置如下属性:
| 属性 | 含义 | 默认值 |
|---|---|---|
TTL | 数据自动过期删除,单位 ms,此值需要为正整数 | INF |
TIME_PARTITION_INTERVAL | 数据库的时间分区间隔,单位 ms,此值需要为正整数 | 604800000 |
MAX_SCHEMA_REGION_GROUP_NUM | 数据库自动扩展 SchemaRegionGroup 时允许达到的最大 SchemaRegionGroup 数量,此值需要为正整数 | 1 |
MAX_DATA_REGION_GROUP_NUM | 数据库自动扩展 DataRegionGroup 时允许达到的最大 DataRegionGroup 数量,此值需要为正整数 | 2 |
注意:
- 属性的大小写不敏感,有关详细信息大小写敏感规则。
- 仅当 iotdb-common.properties 配置文件中的 schema_region_group_extension_policy 和 data_region_group_extension_policy 参数设置为 CUSTOM 策略时支持通过 SQL 在创建或修改数据库时,设置或调整 schema/data region group 最大配额,即 maxSchemaRegionGroupNum 和 maxDataRegionGroupNum。
- MAX_SCHEMA_REGION_GROUP_NUM 和 MAX_DATA_REGION_GROUP_NUM 自 V2.0.10.2 版本起支持。
示例:
CREATE DATABASE IF NOT EXISTS database1 with(TTL=31536000000);2.2 使用数据库
用于指定当前数据库作为表的命名空间。
语法:
USE <DATABASE_NAME>示例:
USE database1;2.3 查看当前数据库
返回当前会话所连接的数据库名称,若未执行过 use语句指定数据库,则默认为 null。
语法:
SHOW CURRENT_DATABASE示例:
USE database1;
SHOW CURRENT_DATABASE;+---------------+
|CurrentDatabase|
+---------------+
| database1|
+---------------+2.4 查看所有数据库
用于查看所有数据库和数据库的属性信息。
语法:
SHOW DATABASES (DETAILS)?语句返回列含义如下:
| 列名 | 含义 |
|---|---|
| database | database名称。 |
| TTL | 数据保留周期。如果在创建数据库的时候指定TTL,则TTL对该数据库下所有表的TTL生效。也可以再通过 CREATE TABLE、ALTER TABLE 来设置或更新表的TTL时间。 |
| SchemaReplicationFactor | 元数据副本数,用于确保元数据的高可用性。可以在iotdb-system.properties中修改schema_replication_factor配置项。 |
| DataReplicationFactor | 数据副本数,用于确保数据的高可用性。可以在iotdb-system.properties中修改data_replication_factor配置项。 |
| TimePartitionInterval | 时间分区间隔,决定了数据在磁盘上按多长时间进行目录分组,通常采用默认1周即可。 |
| SchemaRegionGroupNum | 使用DETAILS语句会返回此列,展示数据库的元数据副本组数量,一般不需要修改 |
| MaxSchemaRegionGroupNum | 使用DETAILS语句会返回此列,展示数据库允许达到的最大元数据副本组数量 |
| DataRegionGroupNum | 使用DETAILS语句会返回此列,展示数据库的数据副本组数量,一般不需要修改 |
| MaxDataRegionGroupNum | 使用DETAILS语句会返回此列,展示数据库允许达到的最大数据副本组数量 |
示例:
SHOW DATABASES DETAILS;+------------------+-------+-----------------------+---------------------+---------------------+--------------------+-----------------------+------------------+---------------------+
| Database|TTL(ms)|SchemaReplicationFactor|DataReplicationFactor|TimePartitionInterval|SchemaRegionGroupNum|MaxSchemaRegionGroupNum|DataRegionGroupNum|MaxDataRegionGroupNum|
+------------------+-------+-----------------------+---------------------+---------------------+--------------------+-----------------------+------------------+---------------------+
| database1| INF| 1| 1| 604800000| 1| 1| 2| 2|
|information_schema| INF| null| null| null| null| null| null| null|
+------------------+-------+-----------------------+---------------------+---------------------+--------------------+-----------------------+------------------+---------------------+2.5 修改数据库
用于修改数据库中的部分属性。
语法:
ALTER DATABASE (IF EXISTS)? database=identifier SET PROPERTIES propertyAssignments说明:
ALTER DATABASE操作目前仅支持对数据库的MAX_SCHEMA_REGION_GROUP_NUM、MAX_DATA_REGION_GROUP_NUM以及TTL属性进行修改。
示例:
ALTER DATABASE database1 SET PROPERTIES TTL=31536000000;
ALTER DATABASE database1 SET PROPERTIES MAX_SCHEMA_REGION_GROUP_NUM=2, MAX_DATA_REGION_GROUP_NUM=4;2.6 删除数据库
用于删除数据库。
语法:
DROP DATABASE (IF EXISTS)? <DATABASE_NAME>说明:
- 数据库已被设置为当前使用(use)的数据库,仍然可以被删除(drop)。
- 删除数据库将导致所选数据库及其内所有表连同其存储的数据一并被删除。
示例:
DROP DATABASE IF EXISTS database1;