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。但一般来说,不建议和第三方共用一个数据库。一旦发生问题,容易扯皮,也不好处理。

相关推荐
窝子面20 分钟前
手搓最简前后端协作-node
javascript·数据库
吳所畏惧32 分钟前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈35 分钟前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HPFBoy44 分钟前
log4net 数据库存日志正确配置
数据库
liuxiaowei31 小时前
【绝版教程】新版MySQL DBA高级实战进阶班 MySQL8.0 姜承尧-腾讯数据库总监
数据库·mysql·dba
破碎的南瓜2 小时前
sqli--sql注入过关笔记(1,2,3,4,5,9)
数据库·笔记·sql
吠品3 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库
SelectDB3 小时前
Apache Doris Variant 动态 JSON 实战教程:从建表到跑通 100M Agent 日志查询
数据库
sg_knight4 小时前
MySQL 存储过程详解:从入门到实战
android·数据库·mysql·database·dba·关系型数据库·db
星空露珠5 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua