TimescaleDB在ZFS和Ext4文件系统上的空间占用对比

信息
操作系统 CentOS7.4
PosgtreSQL版本 10.4
TimescaleDB版本 0.12.1
ZFS压缩算法 LZ4、GZIP

测试场景1: 一列timestamp字段 + N列字符串字段

数据量500万行

1、10列字符串字段,所有行字符数据都一致,每列字符数据亦重复

表结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
create table ext4allcharextreme(
time timestamp not null,
c1 varchar(20),
c2 varchar(20),
c3 varchar(20),
c4 varchar(30),
c5 varchar(30),
c6 varchar(30),
c7 varchar(40),
c8 varchar(40),
c9 varchar(50),
c10 varchar(50)
) tablespace ext4allcharextreme;

使用命令查看数据文件的大小:du -h -m --max-depth=1,注:每张表都是使用独立的表空间
在psql中使用命令查看表空间大小:\db+ ext4allcharextreme

测试结果:

ext4 zfs-lz4 zfs-gzip
空间 2044MB 213MB 181MB
表空间 2044MB 2038MB 2038MB
压缩率 2044/213=9.6x 2044/181=11.3x
空间比率 10.4% 8.85%

2、10列字符串字段,所有行字符数据都是随机的

表结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
create table ext4allchar10(
time timestamp not null,
c1 varchar(20),
c2 varchar(20),
c3 varchar(20),
c4 varchar(30),
c5 varchar(30),
c6 varchar(30),
c7 varchar(40),
c8 varchar(40),
c9 varchar(50),
c10 varchar(50)
) tablespace ext4allchar10;

测试结果:

ext4 zfs-lz4 zfs-gzip
空间 2045MB 1958MB 1462MB
表空间 2045MB 2038MB 2038MB
压缩率 2045/1958=1.044x 2045/1462=1.4x
空间比率 95.7% 71.5%

3、20列字符串字段,所有行字符数据都是随机的

表结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
create table ext4allchar20(
time timestamp not null,
c1 varchar(20),
c2 varchar(20),
c3 varchar(20),
c4 varchar(20),
c5 varchar(20),
c6 varchar(30),
c7 varchar(30),
c8 varchar(30),
c9 varchar(30),
c10 varchar(30),
c11 varchar(40),
c12 varchar(40),
c13 varchar(40),
c14 varchar(40),
c15 varchar(40),
c16 varchar(50),
c17 varchar(50),
c18 varchar(50),
c19 varchar(50),
c20 varchar(50)
) tablespace ext4allchar20;

测试结果:

ext4 zfs-lz4 zfs-gzip
空间 4091MB 4026MB 3016MB
表空间 4090MB 4087MB 4087MB
压缩率 4091/4026=1.016x 4091/3016=1.36x
空间比率 98.4% 73.7%

4、30列字符串字段,所有行字符数据都是随机的

表结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
create table ext4allchar30(
time timestamp not null,
c1 varchar(20),
c2 varchar(20),
c3 varchar(20),
c4 varchar(20),
c5 varchar(20),
c6 varchar(20),
c7 varchar(20),
c8 varchar(30),
c9 varchar(30),
c10 varchar(30),
c11 varchar(30),
c12 varchar(30),
c13 varchar(30),
c14 varchar(30),
c15 varchar(40),
c16 varchar(40),
c17 varchar(40),
c18 varchar(40),
c19 varchar(40),
c20 varchar(40),
c21 varchar(40),
c22 varchar(50),
c23 varchar(50),
c24 varchar(50),
c25 varchar(50),
c26 varchar(50),
c27 varchar(50),
c28 varchar(50),
c29 varchar(50),
c30 varchar(50)
) tablespace ext4allchar30;

测试结果:

ext4 zfs-lz4 zfs-gzip
空间 5765MB 5717MB 4288MB
表空间 5765MB 5763MB 5763MB
压缩率 5765/5717=1.008x 5765/4288=1.34x
空间比率 99.17% 74.38%

测试场景2: 一列timestamp字段 + N列整型字段

数据量1000万行

1、10列整型字段,所有行整数数据都一致

表结构:

1
2
3
create table ext4allintextreme(
time timestamp not null, i1 int,i2 int,i3 int,i4 int,i5 int,i6 bigint,i7 bigint,i8 bigint,i9 bigint,i10 bigint
) tablespace ext4allintextreme;

测试结果:

ext4 zfs-lz4 zfs-gzip
空间 1333MB 340MB 227MB
表空间 1332MB 1257MB 1257MB
压缩率 1333/340=3.92x 1333/227=5.87x
空间比率 25.5% 17.0%

2、10列整型字段,所有行整数数据都是随机的

表结构:

1
2
3
create table ext4allint10(
time timestamp not null, i1 int,i2 int,i3 int,i4 int,i5 int,i6 bigint,i7 bigint,i8 bigint,i9 bigint,i10 bigint
) tablespace ext4allint10;

测试结果:

ext4 zfs-lz4 zfs-gzip
空间 1332MB 1003MB 830MB
表空间 1332MB 1257MB 1257MB
压缩率 1332/1003=1.33x 1332/830=1.6x
空间比率 75.3% 62.3%

3、20列整型字段,所有行整数数据都是随机的

表结构:

1
2
3
create table ext4allint20(
time timestamp not null, i1 int,i2 int,i3 int,i4 int,i5 int,i6 int,i7 int,i8 int,i9 int,i10 int, i11 bigint, i12 bigint,i13 bigint,i14 bigint,i15 bigint,i16 bigint,i17 bigint,i18 bigint,i19 bigint,i20 bigint
) tablespace ext4allint20;

测试结果:

ext4 zfs-lz4 zfs-gzip
空间 1871MB 1671MB 1426MB
表空间 1870MB 1828MB 1828MB
压缩率 1871/1671=1.12x 1871/1426=1.31x
空间比率 89.3% 76.2%

4、30列整型字段,所有行整数数据都是随机的

表结构:

1
2
3
create table ext4allint30(
time timestamp not null, i1 int,i2 int,i3 int,i4 int,i5 int,i6 int,i7 int,i8 int,i9 int,i10 int, i11 int, i12 int,i13 int,i14 int,i15 int,i16 bigint,i17 bigint,i18 bigint,i19 bigint,i20 bigint, i21 bigint,i22 bigint,i23 bigint,i24 bigint,i25 bigint,i26 bigint,i27 bigint,i28 bigint,i29 bigint,i30 bigint
) tablespace ext4allint30;

测试结果:

ext4 zfs-lz4 zfs-gzip
空间 2481MB 2289MB 2230MB
表空间 2480MB 2461MB 2461MB
压缩率 2481/2289=1.08x 2481/2230=1.11x
空间比率 92.3% 89.9%

测试场景3: 一列timestamp字段 + N列real类型字段

数据量500万行

1、10列real类型字段,所有行real列数据都一致

表结构:

1
2
3
create table ext4allrealextreme(
time timestamp not null, i1 real,i2 real,i3 real,i4 real,i5 real,i6 real,i7 real,i8 real,i9 real,i10 real
) tablespace ext4allrealextreme;

测试结果:

ext4 zfs-lz4 zfs-gzip
空间 549MB 170MB 121MB
表空间 549MB 520MB 520MB
压缩率 549/170=3.23x 549/121=4.54x
空间比率 30.9% 22%

2、10列real类型字段,所有行real列数据都是随机数

表结构:

1
2
3
create table ext4allreal10(
time timestamp not null, i1 real,i2 real,i3 real,i4 real,i5 real,i6 real,i7 real,i8 real,i9 real,i10 real
) tablespace ext4allreal10;

测试结果:

ext4 zfs-lz4 zfs-gzip
空间 549MB 375MB 304MB
表空间 549MB 519MB 519MB
压缩率 549/375=1.46x 549/304=1.8x
空间比率 68.3% 55.3%

3、20列real类型字段,所有行real列数据都是随机数

表结构:

1
2
3
create table ext4allreal20(
time timestamp not null, i1 real,i2 real,i3 real,i4 real,i5 real,i6 real,i7 real,i8 real,i9 real,i10 real, i11 real, i12 real,i13 real,i14 real,i15 real,i16 real,i17 real,i18 real,i19 real,i20 real
) tablespace ext4allreal20;

测试结果:

ext4 zfs-lz4 zfs-gzip
空间 751MB 568MB 476MB
表空间 750MB 700MB 700MB
压缩率 751/568=1.32x 751/476=1.58x
空间比率 75.6% 63.4%

4、30列real类型字段,所有行real列数据都是随机数

表结构:

1
2
3
create table ext4allreal30(
time timestamp not null, i1 real,i2 real,i3 real,i4 real,i5 real,i6 real,i7 real,i8 real,i9 real,i10 real, i11 real, i12 real,i13 real,i14 real,i15 real,i16 real,i17 real,i18 real,i19 real,i20 real, i21 real,i22 real,i23 real,i24 real,i25 real,i26 real,i27 real,i28 real,i29 real,i30 real
) tablespace ext4allreal30;

测试结果:

ext4 zfs-lz4 zfs-gzip
空间 944MB 833MB 669MB
表空间 943MB 893MB 893MB
压缩率 1.13x 1.41x
空间比率 88.2% 70.9%

测试场景4: 一列timestamp字段 + N列double类型字段

数据量500万行

1、10列double类型字段,所有行double列数据都一致

表结构:

1
2
3
create table ext4alldoubleextreme(
time timestamp not null, i1 float,i2 float,i3 float,i4 float,i5 float,i6 float,i7 float,i8 float,i9 float,i10 float
) tablespace ext4alldoubleextreme;

测试结果:

ext4 zfs-lz4 zfs-gzip
空间 752MB 184MB 127MB
表空间 752MB 699MB 699MB
压缩率 4.08x 5.9x
空间比率 24.5% 16.9%

2、10列double类型字段,所有行double列数据都是随机数

表结构:

1
2
3
create table ext4alldouble10(
time timestamp not null, i1 float,i2 float,i3 float,i4 float,i5 float,i6 float,i7 float,i8 float,i9 float,i10 float
) tablespace ext4alldouble10;

测试结果:

ext4 zfs-lz4 zfs-gzip
空间 747MB 568MB 511MB
表空间 747MB 700MB 700MB
压缩率 1.31x 1.46x
空间比率 76% 68.4%

3、20列double类型字段,所有行double列数据都是随机数

表结构:

1
2
3
create table ext4alldouble20(
time timestamp not null, i1 float,i2 float,i3 float,i4 float,i5 float,i6 float,i7 float,i8 float,i9 float,i10 float, i11 float, i12 float,i13 float,i14 float,i15 float,i16 float,i17 float,i18 float,i19 float,i20 float
) tablespace ext4alldouble20;

测试结果:

ext4 zfs-lz4 zfs-gzip
空间 1147MB 1037MB 894MB
表空间 1146MB 1095MB 1095MB
压缩率 1.1x 1.28x
空间比率 90.46% 77.9%

4、30列double类型字段,所有行double列数据都是随机数

表结构:

1
2
3
create table ext4alldouble30(
time timestamp not null, i1 float,i2 float,i3 float,i4 float,i5 float,i6 float,i7 float,i8 float,i9 float,i10 float, i11 float, i12 float,i13 float,i14 float,i15 float,i16 float,i17 float,i18 float,i19 float,i20 float, i21 float,i22 float,i23 float,i24 float,i25 float,i26 float,i27 float,i28 float,i29 float,i30 float
) tablespace ext4alldouble30;

测试结果:

ext4 zfs-lz4 zfs-gzip
空间 1538MB 1434MB 1242MB
表空间 1538MB 1483MB 1483MB
压缩率 1.07x 1.23x
空间比率 93.2% 80.8%