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

相关推荐
川石课堂软件测试8 分钟前
接口测试需要注意的一些BUG
网络·数据库·python·单元测试·bug·压力测试·tornado
2401_853576509 分钟前
定时任务专家:Python Schedule库使用指南
jvm·数据库·python
H_老邪12 分钟前
mysql 存储过程
java·数据库·sql
Oueii17 分钟前
如何为开源Python项目做贡献?
jvm·数据库·python
代码派32 分钟前
免费本地部署的数据库 DevOps 工具,能覆盖多少日常工作场景?以 NineData 社区版为例
运维·数据库·database·devops·数据库管理工具·数据管理·sql工具
2401_8914821733 分钟前
Python Web爬虫入门:使用Requests和BeautifulSoup
jvm·数据库·python
96771 小时前
Java 类映射数据库表的核心规则
java·数据库·oracle
oradh1 小时前
Oracle 19c数据库软件和数据库静默安装
数据库·oracle·oracle19c·oracle 19c安装
星辰_mya1 小时前
Redis 锁的“续命”艺术:看门狗机制与原子性陷阱
数据库·redis·分布式·缓存·面试
阳光下的米雪1 小时前
存储过程的使用以及介绍
java·服务器·数据库·pgsql