KWDB 的时序数据表采用时间戳+数值字段+标签的三维结构:
CREATE TABLE sensor ( recordedTime timestamptz NOT NULL, -- 时间戳 current FLOAT, -- 电流值 voltage INT -- 电压值 ) TAGS ( sensor_id INT NOT NULL, -- 设备唯一标识(标签) location VARCHAR(10), -- 安装位置(标签) group_id INT -- 设备分组(标签) ) PRIMARY TAGS ( sensor_id -- 主标签 );
其中时间戳记录数据产生时刻,字段列存储动态变化的监测数值,而标签列则承载设备的静态属性。
这种分离式设计带来的直接优势是:当采集 100 万条传感器数据时,设备位置等标签信息仅需存储一次,相比传统结构可减少 99.99% 的冗余数据写入。
√ 选择离散值高的字段(如自增 ID)
√ 避免使用可能变更的字段(如手机号)
√ 控制主标签数量(通常 1-4 个)
-- 创建含复合主标签的表 CREATE TABLE smart_meter ( ts timestamptz NOT NULL, power_usage FLOAT ) TAGS ( region VARCHAR(6) NOT NULL, meter_no BIGINT NOT NULL ) PRIMARY TAGS (region, meter_no);
SQL -- 动态维护标签示例 ALTER TABLE sensor ADD TAG firmware_version VARCHAR(20); -- 新增固件版本标签 ALTER TABLE sensor ALTER TAG firmware_version TYPE VARCHAR(50); -- 修改标签类型 ALTER TABLE sensor rename TAG group_id TO cluster_id; -- 重命名标签 ALTER TABLE sensor drop TAG location; -- 删除标签
KWDB 自动为主标签创建 Hash 索引,针对精确查询实现 O(1) 时间复杂度:
SQL -- 高效查询示例 select* FROM sensor WHERE sensor_id = 1005; 3.2 非主标签索引策略 对于高频查询的非主标签,建议手动创建索引: SQL -- 创建组合索引 CREATE INDEX idx_sensor_group ON sensor (group_id); -- 带过滤条件的查询 select * FROM sensor WHERE group_id = 10;
我们模拟了 20000 台设备、时间跨度 6 个月、1000万数据量,对比不同方案的性能表现:
测试结果表明,索引优化后,在此场景下查询性能延迟降低 95%。
通过合理运用 KWDB 的标签体系与索引策略,我们成功将某智能制造平台的查询延迟从秒级降至毫秒级。在实际应用中,建议结合业务特点进行标签体系设计,通过持续监控和调优,充分发挥时序数据库的性能优势。