8.IOTDB的压缩方式

分类栏目:IOTDB

资讯

当时间序列写入并按照指定的类型编码为二进制数据后,IotDB会使用压缩技术对该数据进行压缩,进一步提升空间存储效率。虽然编码和压缩都旨在提升存储效率,但编码技术通常只适合特定的数据类型(如二阶差分编码只适合与INT32或者INT64编码, 存储浮点数需要先将他们乘以10m以转换为证书),然后将它们转换为二进制流。压缩方式SNAPPY针对二进制流进行压缩,因此压缩方式的使用不再受数据类型的限制。

基本压缩方式

IOTDB允许在创建一个时间序列的时候指定该列的压缩方式。
UNCOMPRESSED(不压缩)
SNAPPY 压缩
LZ4 压缩
GZIP 压缩
 

旋转门压缩

旋转门压缩SDT算法是一种有损压缩算法。SDT的计算复杂度较低,并使用线性趋势来表示大量数据。
在IOTDB中,SDT在刷新到磁盘时会压缩并丢弃数据。
在创建时间序列时指定SDT的属性,并支持以下三个属性:
CompDev (Compression Deviation,压缩偏差)
ComDev时SDT中最重要的参数,它表示当前样本与当前线性趋势之间的最大差值。CompDev设置的值需要大于0
CompMinTime(Compression Minimum Time Interval,最小压缩时间间隔)
CompMinTime是测量两个存储的数据之间的时间距离的参数,用于减少噪声。如果当前点和最后存储的点之间的时间间隔 小于或等于其值,则无论压缩变差如何,都不会存储当前点。默认值为0,单位为毫秒。
CompMaxTime(Compression Maximum Time Interval,最大压缩时间间隔)
CompMaxTime 是测量两个存储的数据点之间的时间距离的参数。 如果当前点和最后一个存储点之间的时间间隔大于或等于其值, 无论压缩偏差如何,都将存储当前点。 默认值为 9,223,372,036,854,775,807,单位为毫秒。
支持的数据类型:
INT32整形,INT64长整型,FLOAT单精度浮点,DOUBLE双精度浮点
 
SDT在刷新到磁盘时进行压缩,SDT算法始终存储第一个点,并且不存储最后一个点
 

压缩比统计信息

压缩比统计信息文件:data/system/storage_groups/compression_ratio/Ratio-{ratio_sum}-{memtable_flush_time}
  • ratio_sum: memtable压缩比的总和
  • memtable_flush_time: memtable刷盘的总次数
通过 ratio_sum / memtable_flush_time 可以计算出平均压缩比