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