TimescaleDB保存100万条设备采集数据的两种存储方案对比分析

模拟数据:2台设备,每个设备5个采点,每次上报2台设备各5个采点的数据,其中3个采点的数据值为固定前缀+每组的随机字符串,2个采点的数据为固定数值+每组的随机数值。每上报一次即为一组数据。

计划上报100万次。

存储方案1(按每台设备每次上报的数据为一条计算):

表数据量:200万条,实际上报100万次。

chunk: 18

手工压缩其中的3个chunk,效果如下:

chunk 压缩前总大小 压缩后总大小 压缩率

_hyper_10_19_chunk 42909696 8634368 0.20

_hyper_10_20_chunk 42713088 8634368 0.20

_hyper_10_21_chunk 43098112 8634368 0.20

建表语句:

CREATE TABLE public.device_datav (

device_name varchar(300) NOT NULL,

data_time timestamp NOT NULL,

"data" text NOT NULL,

CONSTRAINT vdevice_data_pkey PRIMARY KEY (device_name, data_time)

);

CREATE INDEX device_datav_data_time_idx ON public.device_datav USING btree (data_time DESC);

存储方案2(按每台设备每个采点为一条数据计算):

表数据量:9,999,990条,实际上报99万次。

chunk: 18

手工压缩其中的3个chunk,效果如下:

chunk 压缩前总大小 压缩后总大小 压缩率

_hyper_12_37_chunk 110895104 15835136 0.14

_hyper_12_38_chunk 101867520 15835136 0.16

_hyper_12_39_chunk 104464384 15835136 0.15

建表语句:

CREATE TABLE public.device_kvv (

device_name varchar(300) NOT NULL,

"key" varchar(300) NOT NULL,

data_time timestamp NOT NULL,

str_v varchar(1000) NULL,

long_v int8 NULL,

dbl_v float8 NULL,

json_v json NULL,

CONSTRAINT device_kvv_pkey PRIMARY KEY (device_name, key, data_time)

);

CREATE INDEX device_kvv_data_time_idx ON public.device_kvv USING btree (data_time DESC);

分析:设备数据量越大时,方案2的优势越明显,压缩率高,节约磁盘存储空间。

另外,部分第三方AI软件更倾向于支持方案2。但一般来说,不建议和第三方共用一个数据库。一旦发生问题,容易扯皮,也不好处理。

相关推荐
这个DBA有点耶10 小时前
NULL不是空——数据库里最反直觉的设计,90%新人踩过的坑
数据库·mysql·代码规范
这个DBA有点耶12 小时前
AI写的SQL跑崩了生产库,这锅谁背?
数据库·人工智能·程序员
镜舟科技13 小时前
Databricks 再提 LTAP,AI 时代的数据底座为何重回大一统叙事?
数据库·架构·agent
Databend13 小时前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局
大数据·数据库·agent
ClouGence17 小时前
SQL Server CDC 能放到 Always On 备库读吗?一文讲透原理与实践
数据库·sql server
先吃饱再说1 天前
存储的进化:从 MySQL 到浏览器缓存,数据到底住在哪?
数据库
Nturmoils1 天前
字段太多看不全,ksql 的展开模式和输出控制怎么用
数据库·后端
Databend2 天前
Agent 轨迹分析与归因的数据工程实践
大数据·数据库·agent
这个DBA有点耶2 天前
SQL改写进阶:标量子查询的“隐形代价”与消除实战
数据库·mysql·架构
smallyoung2 天前
数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南
数据库·mysql·postgresql