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

相关推荐
ss2733 小时前
食谱推荐系统功能测试如何写?
java·数据库·spring boot·功能测试
l1t3 小时前
DeepSeek总结的数据库外部表
数据库
m0_674294644 小时前
如何编写SQL存储过程性能对比_记录执行时间评估优化效果
jvm·数据库·python
014-code4 小时前
CompletableFuture 实战模板(超时、组合、异常链处理)
java·数据库
运气好好的4 小时前
怎样开启phpMyAdmin的操作审计日志_记录每条执行的SQL
jvm·数据库·python
それども5 小时前
DELETE 和 TRUNCATE TABLE区别
java·数据库·mysql
wenha5 小时前
数据库隔离级别
数据库·mysql·sqlserver·隔离级别
2401_871492855 小时前
Layui如何修改Layui默认的UI主题颜色(换肤功能实现)
jvm·数据库·python
Edward111111115 小时前
4.27mysql ,数据库,数据源
数据库·mysql
小徐敲java5 小时前
踩坑实录:MySQL8.0 导入SQL报错 2006 - MySQL server has gone away 完美解决
数据库·sql