作者:shunwah
原文链接:https://www.modb.pro/db/1925074221860925440
引言
KaiwuDB 是浪潮控股的数据库企业,面向工业物联网、数字能源、车联网、智慧产业等行业领域,提供稳定安全、高性能、易运维的创新数据软件与服务。在物联网(IoT)技术驱动的数字化浪潮中,全球每天有数百亿台设备产生着规模指数级增长的时序数据,这些数据以毫秒级精度记录着物理世界的动态变化。从工业产线的振动监测到智能电网的电力调度,从车联网的轨迹追踪到智慧城市的传感器网络,物联网场景对数据管理的核心需求已从“存储”演变为“高效处理与分析”——既要应对每秒百万级的并发写入压力,又需满足毫秒级实时查询的响应要求,同时实现 PB 级历史数据的低成本长期存储。
时序数据库作为物联网数据基础设施的基石,其设计理念与关系型数据库存在本质差异。传统数据库在处理时间序列数据时,往往因写入性能瓶颈、查询效率低下及存储成本失控等问题难以胜任,而专为时序场景优化的 KaiwuDB,则通过架构创新重新定义了物联网数据管理范式:基于时间维度的列式存储、自适应压缩算法与智能生命周期策略,使其在写入吞吐、查询延迟及存储成本间实现了动态平衡;结合多租户隔离、冷热分层存储及边缘-云端协同计算能力,更进一步解决了物联网场景中设备异构性、数据隐私性及网络延迟等衍生挑战。
本文将以浪潮 KaiwuDB 为技术载体,系统阐述物联网时序数据库从架构设计到落地实践的全链路经验。通过解析数据建模规范、资源隔离策略、异常诊断方法及性能调优案例,揭示如何通过数据库配置与业务场景的深度耦合,实现物联网系统稳定性提升、存储成本降低的量化价值。同时,结合智能家居、工业制造、车联网等领域的真实需求,展望时序数据库与 AI 融合分析、边缘计算协同的未来演进方向,为物联网从业者提供可复用的技术决策框架。
一、物联网数据库规划与创建
在物联网应用中,设备持续不断地产生时间序列数据,这些数据通常具有高频率写入、访问模式不均衡、生命周期明确等特点。因此,在部署时序数据库时,合理规划数据的生命周期(Retention)和分区策略(Partition Interval) 是保障系统性能与存储效率的关键。
KaiwuDB 提供了面向时序场景深度优化的数据库创建能力,支持灵活配置数据保留周期与时间分区策略,能够根据不同业务需求定制合适的存储方案。
1. 创建智能物联网数据库(smart_home_iot)
适用于数据更新频繁、访问集中于近期记录的场景(如家庭传感器数据),设置数据保留周期为 90 天,按天进行分区管理:
root@127.0.0.1:26257/defaultdb> CREATE TS DATABASE smart_home_iot
RETENTIONS 90d
PARTITION INTERVAL 1d;
-> RETENTIONS 90d
-> PARTITION INTERVAL 1d;
CREATE TS DATABASE
Time: 4.462001ms
root@127.0.0.1:26257/defaultdb>
复制代码
2. 创建智能物联网监控数据库(industrial_monitoring)
适用于需长期存储、周期性分析的智能物联网监测类数据,设置数据保留周期为 3 年,并按照自然月进行分区:
root@127.0.0.1:26257/defaultdb> CREATE TS DATABASE industrial_monitoring
-> RETENTIONS 3y
-> PARTITION INTERVAL 1mon;
CREATE TS DATABASE
Time: 5.243928ms
root@127.0.0.1:26257/defaultdb>
复制代码
通过上述方式,可以根据不同业务需求构建高效、可扩展的时序数据管理平台,充分发挥 KaiwuDB 在物联网场景下的性能优势。
二、物联网数据库管理与维护
1. 数据库状态监控
为了确保物联网数据库的健康运行和高效管理,定期检查数据库的状态是非常重要的。KaiwuDB 提供了多种命令来帮助用户查看和管理数据库。
1.1 查看所有数据库
使用 SHOW DATABASES; 命令可以列出当前实例中的所有数据库及其类型(关系型或时序型):
root@127.0.0.1:26257/defaultdb> SHOW DATABASES;
database_name | engine_type
------------------------+--------------
db1 | RELATIONAL
defaultdb | RELATIONAL
example_db | RELATIONAL
iiot_comparison | RELATIONAL
industrial_monitoring | TIME SERIES
iot_tsdb | RELATIONAL
postgres | RELATIONAL
relationaldb | RELATIONAL
smart_home_iot | TIME SERIES
system | RELATIONAL
testdb | RELATIONAL
ts_metrics | RELATIONAL
(12 rows)
Time: 4.223552ms
root@127.0.0.1:26257/defaultdb>
复制代码
1.2 查看特定数据库的创建参数
通过 SHOW CREATE DATABASE; 可以查看某个特定数据库的创建语句和配置参数:
root@127.0.0.1:26257/defaultdb> SHOW CREATE DATABASE smart_home_iot;
database_name | create_statement
-----------------+------------------------------------
smart_home_iot | CREATE TS DATABASE smart_home_iot
| retentions 7776000s
| partition interval 1d
(1 row)
Time: 1.717976ms
root@127.0.0.1:26257/defaultdb>
复制代码
1.3 查看数据库注释信息
为了更好地记录和管理业务场景,可以通过 SHOW DATABASES WITH COMMENT; 查看每个数据库的注释信息:
root@127.0.0.1:26257/defaultdb> SHOW DATABASES WITH COMMENT;
database_name | engine_type | comment
------------------------+-------------+----------
db1 | RELATIONAL | NULL
defaultdb | RELATIONAL | NULL
example_db | RELATIONAL | NULL
iiot_comparison | RELATIONAL | NULL
industrial_monitoring | TIME SERIES | NULL
iot_tsdb | RELATIONAL | NULL
postgres | RELATIONAL | NULL
relationaldb | RELATIONAL | NULL
smart_home_iot | TIME SERIES | NULL
system | RELATIONAL | NULL
testdb | RELATIONAL | NULL
ts_metrics | RELATIONAL | NULL
(12 rows)
Time: 85.950133ms
root@127.0.0.1:26257/defaultdb>
复制代码
2. 数据库配置调整
随着业务需求的变化,可能需要调整数据库的配置参数。以下是一些常见的配置调整示例。
2.1 延长智能家居数据保留周期至 180 天
root@127.0.0.1:26257/defaultdb> ALTER TS DATABASE smart_home_iot SET RETENTIONS = 180d;
ALTER TS DATABASE
Time: 3.266749ms
root@127.0.0.1:26257/defaultdb>
复制代码
2.2 调整工业监控数据分区策略为按周分区
root@127.0.0.1:26257/defaultdb> ALTER TS DATABASE industrial_monitoring SET PARTITION INTERVAL = 1w;
ALTER TS DATABASE
Time: 3.043956ms
root@127.0.0.1:26257/defaultdb>
复制代码
2.3 修改数据库名称(需谨慎操作)
在某些情况下,可能需要修改数据库名称。注意,这一操作需要谨慎执行,因为它会影响所有依赖该数据库的应用程序和服务:
root@127.0.0.1:26257/defaultdb> ALTER DATABASE smart_home_iot RENAME TO smart_home_iot_v2;
RENAME DATABASE
Time: 6.420401ms
root@127.0.0.1:26257/defaultdb>
root@127.0.0.1:26257/defaultdb>
复制代码
三、物联网数据存储优化
在物联网应用中,合理配置数据库的存储参数对于确保数据的安全性和高效管理至关重要。以下是如何创建和配置数据库的具体步骤及注意事项。
1. 创建数据库
首先,我们需要为关键设备的数据创建一个专门的数据库 critical_devices:
root@127.0.0.1:26257/defaultdb> CREATE DATABASE critical_devices;
CREATE DATABASE
Time: 4.490416ms
root@127.0.0.1:26257/defaultdb>
复制代码
2. 配置数据库区域设置
接下来,根据业务需求配置该数据库的区域设置(如副本数和 GC 时间)。例如,为关键设备数据设置更高的副本数(5 个)和更长的 GC 时间(48 小时):
root@127.0.0.1:26257/defaultdb> use critical_devices;
SET
Time: 1.266638ms
root@127.0.0.1:26257/critical_devices> ALTER DATABASE critical_devices CONFIGURE ZONE USING
gc.ttlseconds = 172800;
-> num_replicas = 5,
-> gc.ttlseconds = 172800;
CONFIGURE ZONE 1
Time: 4.847796ms
root@127.0.0.1:26257/critical_devices>
复制代码
3. 应用默认配置或特殊配置
对于普通传感器数据,如果已经有对应的数据库,可以直接使用默认配置。如果需要创建并应用默认配置,可以执行以下操作:
3.1 创建普通传感器数据的数据库
root@127.0.0.1:26257/defaultdb> CREATE DATABASE normal_sensors;
CREATE DATABASE
Time: 3.980335ms
root@127.0.0.1:26257/defaultdb>
复制代码
4. 应用默认配置
如果你不需要对数据库进行特殊配置,可以选择丢弃现有的自定义配置,恢复到默认设置:
root@127.0.0.1:26257/defaultdb> ALTER DATABASE normal_sensors CONFIGURE ZONE DISCARD;
CONFIGURE ZONE 0
Time: 4.634474ms
root@127.0.0.1:26257/defaultdb>
复制代码
注意事项 ##
确认数据库名称:确保你想要配置的数据库名称正确无误,并且已经存在于系统中。
权限检查:确保当前用户有权限创建数据库以及修改数据库的配置。
GC 时间单位:gc.ttlseconds 的值是以秒为单位,因此 172800 秒等于 48 小时。
副本数:根据实际需要设置副本数,较高的副本数可以提高数据的可用性和可靠性,但也会增加存储成本和写入延迟。
四、物联网数据生命周期管理
在物联网应用中,有效的数据生命周期管理对于确保系统的高效运行和成本控制至关重要。本节将介绍如何通过自动化数据清理和数据归档策略来优化数据管理。
1. 自动化数据清理
✅ 完整脚本:创建 + 设置 + 清理
1.1 创建 env_sensors 时序数据库
创建用于存储温湿度传感器数据的数据库 env_sensors,并设置数据保留时间为 30 天:
root@127.0.0.1:26257/defaultdb> CREATE TS DATABASE env_sensors;
CREATE TS DATABASE
Time: 5.938603ms
root@127.0.0.1:26257/defaultdb>
复制代码
1.2 创建 device_logs 时序数据库
创建用于存储设备日志数据的数据库 device_logs,并设置数据保留时间为 1 年:
root@127.0.0.1:26257/defaultdb> CREATE TS DATABASE device_logs;
CREATE TS DATABASE
Time: 4.485131ms
root@127.0.0.1:26257/defaultdb>
复制代码
1.3 切换数据库并建表
切换到 env_sensors 数据库:
root@127.0.0.1:26257/defaultdb> use env_sensors;
SET
Time: 649.29µs
root@127.0.0.1:26257/env_sensors>
复制代码
1.4 – 在 env_sensors 中创建传感器数据表
创建一个名为 sensor_readings 的时序表,用于存储来自不同传感器的数据,并设置相应的标签(TAGS)以区分不同的传感器及其类型。
root@127.0.0.1:26257/env_sensors> CREATE TABLE sensor_readings (
pressure FLOAT
) TAGS (
sensor_id INT NOT NULL,
sensor_type VARCHAR(30) NOT NULL
) PRIMARY TAGS (sensor_id);
-> k_timestamp TIMESTAMP NOT NULL,
-> temperature FLOAT NOT NULL,
-> humidity FLOAT,
-> pressure FLOAT
-> ) TAGS (
-> sensor_id INT NOT NULL,
-> sensor_type VARCHAR(30) NOT NULL
-> ) PRIMARY TAGS (sensor_id);
CREATE TABLE
Time: 98.992421ms
root@127.0.0.1:26257/env_sensors>
复制代码
1.4 创建带有生命周期管理和分区策略的传感器数据表 sensor_readingsp
创建一个名为 sensor_readingsp 的时序表,不仅包含时间戳和数值数据,还设置了数据保留时间和自动分区策略,以便于长期数据管理和高效查询。
root@127.0.0.1:26257/env_sensors> CREATE TABLE sensor_readingsp (ts TIMESTAMP NOT NULL, value FLOAT) TAGS (sensor_id INT NOT NULL) PRIMARY TAGS (sensor_id) RETENTIONS 20D PARTITION INTERVAL 5D;
CREATE TABLE
Time: 56.956987ms
root@127.0.0.1:26257/env_sensors>
复制代码
2. 设置保留策略(Retention)
2.1 为 env_sensors 数据库设置数据保留时间为 30 天:
root@127.0.0.1:26257/env_sensors> ALTER TS DATABASE env_sensors SET RETENTIONS = 30d;
ALTER TS DATABASE
Time: 3.654779ms
root@127.0.0.1:26257/env_sensors>
复制代码
2.2 设置 device_logs 数据库的数据保留时间为 1 年
root@127.0.0.1:26257/env_sensors> ALTER TS DATABASE device_logs SET RETENTIONS = 1y;
ALTER TS DATABASE
Time: 3.903087ms
root@127.0.0.1:26257/env_sensors>
复制代码
解释:
-数据列:value FLOAT 表示传感器读数的实际数值。
TAGS:仅包含 sensor_id 作为标签,用于区分不同的传感器来源。
PRIMARY TAGS:同样指定 sensor_id 为主标签。
RETENTIONS:设置为 20D,意味着该表的数据将在 20 天后自动清理。
PARTITION INTERVAL:设置为 5D,表示每隔 5 天的数据会存放在一个新的分区中,有助于提高查询效率并简化数据管理。
3. 数据归档策略
为了长期保存重要数据,可以创建一个专门的归档数据库,并将历史数据迁移至该数据库。
3.1 创建长期归档数据库
创建一个名为 iot_archive 的数据库,用于长期保存设备的历史数据,数据保留时间为 10 年,按年分区:
root@127.0.0.1:26257/env_sensors> CREATE TS DATABASE iot_archive RETENTIONS 10y PARTITION INTERVAL 1y;
CREATE TS DATABASE
Time: 6.404539ms
root@127.0.0.1:26257/env_sensors>
复制代码
3.2 将重要设备历史数据迁移至归档库
切换到 iot_archive 数据库,并创建一个带分区的时序表:
root@127.0.0.1:26257/env_sensors> use iot_archive;
SET
Time: 571.24µs
root@127.0.0.1:26257/iot_archive>
复制代码
3.3 – 创建带分区的时序表
root@127.0.0.1:26257/iot_archive> CREATE TABLE device_history (
device_id VARCHAR(64) NOT NULL -- 注意VARCHAR类型长度限制
) PRIMARY TAGS (device_id)
PARTITION INTERVAL 5D;
-> collection_time TIMESTAMP NOT NULL,
-> cpu_usage FLOAT,
-> mem_free BIGINT,
-> temp FLOAT
-> ) TAGS (
-> device_id VARCHAR(64) NOT NULL -- 注意VARCHAR类型长度限制
-> ) PRIMARY TAGS (device_id)
-> PARTITION INTERVAL 5D;
CREATE TABLE
Time: 56.38193ms
root@127.0.0.1:26257/iot_archive>
复制代码
3.4 – 查看表定义
root@127.0.0.1:26257/iot_archive> SHOW CREATE TABLE device_history;
table_name | create_statement
-----------------+---------------------------------------------------------------
device_history | CREATE TABLE device_history (
| collection_time TIMESTAMPTZ(3) NOT NULL,
| cpu_usage FLOAT8 NULL,
| mem_free INT8 NULL,
| temp FLOAT8 NULL
| ) TAGS (
| device_id VARCHAR(64) NOT NULL ) PRIMARY TAGS(device_id)
| retentions 315360000s
| activetime 1d
| partition interval 5d
(1 row)
Time: 162.053704ms
root@127.0.0.1:26257/iot_archive>
复制代码
五、 性能调优实践
1. 分层存储策略实施
1.1 创建热数据层数据库 warm_storage
为运营分析数据创建一个名为 warm_storage 的数据库,设置保留期为 90 天,并按天分区。
root@127.0.0.1:26257/hot_storage> CREATE TS DATABASE warm_storage
-> RETENTIONS 90d
-> PARTITION INTERVAL 1d;
CREATE TS DATABASE
Time: 4.765049ms
root@127.0.0.1:26257/hot_storage>
复制代码
保留期:90 天
分区间隔:每天一个分区
1.2 创建冷数据层数据库 cold_storage
为合规审计数据创建一个名为 cold_storage 的数据库,设置保留期为 3 年,并按月分区。
root@127.0.0.1:26257/hot_storage> CREATE TS DATABASE cold_storage
-> RETENTIONS 3y
-> PARTITION INTERVAL 1mon;
CREATE TS DATABASE
Time: 4.864591ms
root@127.0.0.1:26257/hot_storage>
复制代码
保留期:3 年
分区间隔:每月一个分区
2. 动态调整旺季配置
在业务高峰期,延长数据保留周期以适应更高的查询需求。
2.1 修改 hot_storage 数据库的保留期至 14 天:
root@127.0.0.1:26257/hot_storage> ALTER TS DATABASE hot_storage SET RETENTIONS = 14d;
ALTER TS DATABASE
Time: 4.017206ms
root@127.0.0.1:26257/hot_storage>
复制代码
2.2 修改 warm_storage 数据库的保留期至 180 天:
root@127.0.0.1:26257/hot_storage> ALTER TS DATABASE warm_storage SET RETENTIONS = 180d;
ALTER TS DATABASE
Time: 2.179216ms
root@127.0.0.1:26257/hot_storage>
复制代码
3. 恢复淡季默认配置
在业务淡季,恢复原有的保留周期以节省存储资源。
3.1 将 hot_storage 数据库的保留期恢复至 7 天:
root@127.0.0.1:26257/hot_storage> ALTER TS DATABASE hot_storage SET RETENTIONS = 7d;
ALTER TS DATABASE
Time: 3.336586ms
root@127.0.0.1:26257/hot_storage>
复制代码
3.2 将 warm_storage 数据库的保留期恢复至 90 天:
root@127.0.0.1:26257/hot_storage> ALTER TS DATABASE warm_storage SET RETENTIONS = 90d;
ALTER TS DATABASE
Time: 3.704184ms
root@127.0.0.1:26257/hot_storage>
复制代码
4. 多租户隔离方案实现
根据不同的租户需求创建独立的数据库,并配置相应的存储策略。
4.1 租户 A 的数据库 tenant_a_iot,保留期为 180 天,按天分区:
root@127.0.0.1:26257/hot_storage> CREATE TS DATABASE tenant_a_iot
-> RETENTIONS 180d
-> PARTITION INTERVAL 1d;
CREATE TS DATABASE
Time: 3.561291ms
root@127.0.0.1:26257/hot_storage>
复制代码
4.2 租户 B 的数据库 tenant_b_iot,保留期为 365 天,按周分区:
root@127.0.0.1:26257/hot_storage> CREATE TS DATABASE tenant_b_iot
-> RETENTIONS 365d
-> PARTITION INTERVAL 1w;
CREATE TS DATABASE
Time: 3.304767ms
root@127.0.0.1:26257/hot_storage>
复制代码
5. 设置差异化存储策略
针对不同租户的需求,定制化设置存储参数。
5.1 针对租户 A 的配置(3 个副本,最小范围 512MB,最大范围 1GB):
root@127.0.0.1:26257/hot_storage> ALTER DATABASE tenant_a_iot CONFIGURE ZONE USING
-> num_replicas = 3,
-> range_min_bytes = 536870912, -- 512MB
-> range_max_bytes = 1073741824; -- 1GB
CONFIGURE ZONE 1
Time: 3.940903ms
root@127.0.0.1:26257/hot_storage>
复制代码
5.2 针对租户 B 的配置(5 个副本,最小范围 1GB,最大范围 2GB,垃圾回收 TTL 为 3 天):
root@127.0.0.1:26257/hot_storage>
root@127.0.0.1:26257/hot_storage> ALTER DATABASE tenant_b_iot CONFIGURE ZONE USING
-> num_replicas = 5,
-> range_min_bytes = 1073741824, -- 1GB
-> range_max_bytes = 2147483648, -- 2GB
-> gc.ttlseconds = 259200; -- 3天(单位为秒)
CONFIGURE ZONE 1
Time: 6.033151ms
root@127.0.0.1:26257/hot_storage>
复制代码
6. 配套管理存储分层
使用 SHOW CREATE DATABASE 命令逐个查看各数据库的具体配置情况。
6.1 查看 hot_storage 的配置:
root@127.0.0.1:26257/hot_storage> SHOW CREATE DATABASE hot_storage;
database_name | create_statement
----------------+---------------------------------
hot_storage | CREATE TS DATABASE hot_storage
| retentions 604800s
| partition interval 10d
(1 row)
Time: 2.874525ms
root@127.0.0.1:26257/hot_storage>
复制代码
6.2 查看 warm_storage 的配置:
root@127.0.0.1:26257/hot_storage> SHOW CREATE DATABASE warm_storage;
database_name | create_statement
----------------+----------------------------------
warm_storage | CREATE TS DATABASE warm_storage
| retentions 7776000s
| partition interval 1d
(1 row)
Time: 1.393276ms
root@127.0.0.1:26257/hot_storage>
复制代码
6.3 查看 cold_storage 的配置:
root@127.0.0.1:26257/hot_storage> SHOW CREATE DATABASE cold_storage;
database_name | create_statement
----------------+----------------------------------
cold_storage | CREATE TS DATABASE cold_storage
| retentions 94608000s
| partition interval 30d
(1 row)
Time: 1.719896ms
root@127.0.0.1:26257/hot_storage>
复制代码
7. 验证多租户配置的优化方案
通过 SHOW ZONE CONFIGURATION FOR DATABASE 命令查看特定租户的配置详情。
7.1 查看租户 A 的配置:
root@127.0.0.1:26257/hot_storage> SHOW ZONE CONFIGURATION FOR DATABASE tenant_a_iot;
target | raw_config_sql
------------------------+---------------------------------------------------
DATABASE tenant_a_iot | ALTER DATABASE tenant_a_iot CONFIGURE ZONE USING
| range_min_bytes = 536870912,
| range_max_bytes = 1073741824,
| gc.ttlseconds = 90000,
| num_replicas = 3,
| constraints = '[]',
| lease_preferences = '[]'
(1 row)
Time: 1.440345ms
root@127.0.0.1:26257/hot_storage>
复制代码
7.2 查看租户 B 的配置:
root@127.0.0.1:26257/hot_storage> SHOW ZONE CONFIGURATION FOR DATABASE tenant_b_iot;
target | raw_config_sql
------------------------+---------------------------------------------------
DATABASE tenant_b_iot | ALTER DATABASE tenant_b_iot CONFIGURE ZONE USING
| range_min_bytes = 1073741824,
| range_max_bytes = 2147483648,
| gc.ttlseconds = 259200,
| num_replicas = 5,
| constraints = '[]',
| lease_preferences = '[]'
(1 row)
Time: 1.212563ms
root@127.0.0.1:26257/hot_storage>
复制代码
通过上述优化后的说明,用户可以更直观地理解如何实施分层存储策略、动态调整配置以及实现多租户隔离方案。
总结
KaiwuDB 时序数据库为物联网场景提供了高效、稳定、可扩展的数据管理解决方案。通过合理的生命周期配置(如数据保留策略、TTL 控制)、分区策略优化(按时间或设备维度划分)以及存储参数调优(副本数、压缩策略等),能够有效应对海量设备持续写入、高频查询与长期存储的典型挑战。
本文介绍的建库建表规范、多租户隔离配置、冷热分层存储、异常处理流程和性能调优实践,已在多个大型物联网项目中落地验证,显著提升了系统的稳定性与资源利用率,同时降低了整体运维与存储成本。
随着物联网技术的快速发展,设备连接规模和数据复杂度持续增长,建议结合业务特点动态评估数据管理策略,灵活调整数据库配置,实现性能与成本的最佳平衡。未来,KaiwuDB 将持续增强在时序数据处理、边缘计算协同、AI 融合分析等方面的能力,为智能家居、工业物联网、车联网等新兴场景提供更加智能、高效的数据底座支撑。
—— 仅供参考。如果有更多具体的问题或需要进一步的帮助,请随时告知。😊
评论