Thingsboard 的遥测时序数据存储在ts_kv表中, 默认的分区策略是按月分区的,每月生成一个分区表,存储的是全部的每分每秒的数据。


在thingsboard安装时,对数据库配置中有一项配置SQL_POSTGRES_TS_KV_PARTITIONING 默认配置为MONTHS。

此配置项支持DAYS, MONTHS, YEARS, INDEFINITE 参数。如果你修改为DAYS ,则ts_kv 表的默认分区就是按日分区。此配置项的意义在于当遥测数据量比较大时, 按日分区可以有效优化数据库性能。
此配置项实际对应在数据库中的函数get_partition_by_system_ttl_date
CREATE OR REPLACE FUNCTION "public"."get_partition_by_system_ttl_date"(IN "partition_type" varchar, IN "date" timestamp, OUT "partition" varchar)
RETURNS "pg_catalog"."varchar" AS $BODY$
BEGIN
CASE
WHEN partition_type = 'DAYS' THEN
partition := 'ts_kv_' || to_char(date, 'yyyy') || '_' || to_char(date, 'MM') || '_' || to_char(date, 'dd');
WHEN partition_type = 'MONTHS' THEN
partition := 'ts_kv_' || to_char(date, 'yyyy') || '_' || to_char(date, 'MM');
WHEN partition_type = 'YEARS' THEN
partition := 'ts_kv_' || to_char(date, 'yyyy');
ELSE
partition := NULL;
END CASE;
IF partition IS NOT NULL THEN
IF NOT EXISTS(SELECT
FROM pg_tables
WHERE schemaname = 'public'
AND tablename = partition) THEN
partition := NULL;
RAISE NOTICE 'Failed to found partition by ttl';
END IF;
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
通过修改配置文件thingsboard.yml 的SQL_POSTGRES_TS_KV_PARTITIONING ,可以修改为按日分区或按年分区。

更进一步,同时修改get_partition_by_system_ttl_date 函数 和 SQL_POSTGRES_TS_KV_PARTITIONING的参数,可以自定义分区策略(按时间)。
thingsboard 的ts_kv_latest表,存储最新的遥测数据,表结构如下:

另外还有一张表ts_kv_dictionary 存储遥测数据的Key的ID,为每一个遥测键名生成的自增的对应id。

key在前端显示遥测数据键名,key_id为Thingsboard为每一个遥测键名生成的自增的对应id。

以entity_id和key_id为复合查询条件,区分相同的key属于哪个设备。
如果时序数据库用的是cassandra,则配置文件中关于ts_kv 表分区的配置参数为:TS_KV_PARTITIONING ,参见官方文档。
如果您选择使用 TimescaleDB 作为数据库,ts_kv表会被创建为 TimescaleDB 的hypertable,以便利用 TimescaleDB 的数据优化功能。
系列文章:
物联网开源平台开发系列001 – 开源平台Thingsboard 介绍
物联网开源平台开发系列002 – Thingsboard 用户系统分析
物联网开源平台开发系列003 – Thingsboard OAuth2 – Google身份验证登陆
物联网开源平台开发系列004 – Thingsboard的实体、资产、设备一般说明及数据存储 – 陈皮王五de杂记
物联网开源平台开发系列005 – Thingsboard的API简述 – 陈皮王五de杂记
物联网开源平台开发系列006 – 在Thingsboard内创建一个设备 – 陈皮王五de杂记
物联网开源平台开发系列007 – Thingsboard的批量导入设备 – 陈皮王五de杂记
物联网开源平台开发系列008 – 浅谈物联网传输协议 – 陈皮王五de杂记
物联网开源平台开发系列009 – Thingsboard服务器对IoT设备下发指令 – 陈皮王五de杂记
物联网开源平台开发系列010 – Thingsboard规则引擎简介 – 陈皮王五de杂记
物联网开源平台开发系列011 – Thingsboard规则节点Originator Telemetry – 陈皮王五de杂记
物联网开源平台开发系列012 – Thingsboard 设备离线Alarm设置 – 陈皮王五de杂记
物联网开源平台开发系列013 – Thingsboard 遥测产生告警Alarm – 陈皮王五de杂记
物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 – 陈皮王五de杂记
物联网开源平台开发系列015 – Thingsboard postgresql数据库基本配置 – 陈皮王五de杂记
物联网开源平台开发系列016 – 再谈Thingsboard的设备注册 – 陈皮王五de杂记
物联网开源平台开发系列017 – Thingsboard的设备联动场景 – 陈皮王五de杂记
物联网开源平台开发系列018 – Thingsboard获取和处理天气信息 – 陈皮王五de杂记
物联网开源平台开发系列019 – Thingsboard设备数据传播给资产 – 陈皮王五de杂记
物联网开源平台开发系列020 – Thingsboard的实体视图Entity View – 陈皮王五de杂记
物联网开源平台开发系列021 – Thingsboard的网关gateway – 陈皮王五de杂记
物联网开源平台开发系列022 – 通过Thingsboard网关gateway动态创建设备 – 陈皮王五de杂记
物联网开源平台开发系列023 – Thingsboard设备列表仪表盘 – 陈皮王五de杂记
物联网开源平台开发系列024 – Thingsboard接入摄像头方案 – 陈皮王五de杂记
物联网开源平台开发系列025 – Thingsboard规则链节点的JS代码调试 – 陈皮王五de杂记
原创文章,作者:Gary,如若转载,请注明出处:https://www.cpw5.top/963.html
淘宝小店:陈皮王五工作室
评论列表(18条)
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]
[…] 物联网开源平台开发系列014 – Thingsboard遥测时序数据存储结构及分区策略 &#… […]