时间序列数据压缩算法简述

本文简单介绍了时间序列压缩任务的来源,压缩算法的分类,并对常见压缩算法的优缺点进行了简介,爱码士们快来一探究竟呀!

引言

时间序列数据是在许多应用程序和领域中生成的一种基本数据类型,例如金融、医疗保健、交通和智慧城市[1]。时间序列分析对于各种任务至关重要,包括异常检测、预测、分类和聚类等。然而,时间序列数据的庞大数量和复杂性可能对高效存储、检索和处理带来重大挑战[2]。

相比于传统的关系型数据库,时间序列数据库天生是为了时间序列数据处理而生。关系数据库往往采用传统的B+树存储结构以及行式存储的方式。这种存储结构的设计方案往往适合读多写少的场景,来提高数据查询性能,用以减少磁盘或者网络 I/O。

然而,在这种设计上,由于绝大部分设计和资源都是为了读取数据,在每插入一条新记录时,都要同步更新相应的存储结构。数据库往往还要先找到所要插入的数据位于B+ 树中的哪个节点,存储页面中的哪一个页,查看相应的键是不是已经存在等等,这都会大量增加插入操作的时间开销。因此,以目前时间序列数据库开源社区使用最为广泛的InfluxDB[3]为例,其采用了基于LSM树的存储结构,并对此进行了一些特异性优化开发,使得数据库写入的能力提高很多倍。

随着时间的推移,早期产生的数据所具有的价值会越来越低,对于时间序列数据库的应用场景之一监控场景来说,用户更可能仅仅关注当前时刻或近期内数据库的状态参数,而较早产生的数据会因时间积累越来越多且仅有较低概率会被查询。因此有必要对早期的数据进行一定程度的压缩,同时考虑到该类型数据查询价值较低,在提高压缩比的同时又能够尽可能保留原始数据的一些特征便成为了一个重要的问题。这样可以更好地对数据库资源合理规划、缓解数据库管理数据的压力,降本增效,更好的为数据的存储和查询赋能。

为了应对这些挑战,越来越需要专门的算法和数据结构来压缩并索引时间序列数据。数据压缩算法主要在数据压缩比、数据解压缩速度、数据压缩精度这几方面做权衡,指导了时间序列数据压缩的各种技术的发展。

数据压缩算法分类

对于时间序列数据,有几种常用的压缩算法。可以根据压缩再解压后是否丢失精度问题,将压缩算法分为两类:分别是无损压缩算法和有损压缩算法。

无损压缩算法的特点是压缩前后数据的完整性保持不变,即压缩后的数据可以完全恢复到压缩前的原始数据。常见的无损压缩算法包括:

  • 基于差分编码的算法[7,8]:差分编码算法通过计算相邻时间点之间的差异来压缩时间序列数据,减少冗余信息的存储。
  • 基于霍夫曼编码的算法[9,10]:使用变长编码,高频数据用较短的代码表示,而低频数据用较长的代码表示。

有损压缩算法通过去除一些冗余信息来达到较高的压缩率,但压缩后的数据不能完全恢复到原始数据,可能存在一定程度的误差。常见的有损压缩算法包括:

  • 基于小波变换的算法[11,12]:小波变换可以将时间序列数据分解成多个频率子带,提取时间序列数据的主要特征,然后通过编码对这些特征进行压缩。
  • 基于离散余弦变换的算法:离散余弦变换可以将时间序列数据转换为频域信号,通过保留高频分量和抑制低频分量实现压缩。

广泛应用的压缩算法简介

  • Gorilla[13]是一种基于二进制元组编码的时间序列数据压缩算法。它的优点包括高压缩率、高压缩速度和较低的存储要求,但由于需要大缓冲区,可能会受到内存限制的影响。
  • LZ4[14]是一种通用数据压缩算法,也可用于时间序列数据压缩。其优点包括压缩速度快、压缩延迟低、压缩比好,但在一些特殊的时间序列数据分布中,可能会出现压缩性能不佳的情况。
  • Zstandard[15]是一种基于LZ77算法的压缩算法,适用于一般的压缩解压任务, 也可以用于时间序列数据的压缩。其优点是压缩比高,解压延迟低,压缩速度可调,但压缩时间可能较长。
  • Snappy[16]是一种快速压缩算法,适用于各种类型的数据,包括时间序列数据。其优点包括压缩速度高、压缩延迟低、压缩比可靠,但压缩比相对较低。
  • LFZip[17]是一种基于分段和拟合算法的时间序列数据压缩算法,具有良好的压缩比和速度。它的缺点是不能处理异常值和噪声,需要调整一些参数以适应 同的数据分布。
  • Chimp[18]是一种基于采样的时间序列数据压缩算法,具有高压缩比和速度,可以动态适应不同的数据分布。它的缺点是需要足够的采样频率来保证压缩精度,并且处理异常值的能力较弱。
  • Sprintz[19]是一种简单有效的无损数据压缩算法。其主要优点包括压缩比高、速度快、复杂度低。但是Sprintz算法对数据相关性的依赖度很高,需要额外的一些位来存储差异,导致存储量相对较低。

在 CnosDB 中应用压缩算法

在 CnosDB 中,可以在创建数据库时对特定的属性指定压缩方法,CnosDB 中支持的压缩方法包括:

  • Delta
  • Gzip
  • Bzip
  • Gorilla
  • Snappy
  • Zstd
  • Zlib
  • BitPack
  • SDT
  • DeadBand

语法结构如下:

CREATE TABLE TIMESERIES(column1 BIGINT CODEC(DELTA),name STRING CODEC(GZIP),age BIGINT UNSIGNED CODEC(NULL),marriage BOOLEAN,ID DOUBLE CODEC(GORILLA)
)

在创建数据库时,指定属性的类型后,附加一个CODEC(),括号内是压缩方法,来达到指定压缩方式的效果。

小结

时间序列的压缩主要还是围绕着时间序列的连续性好、相关性强的特点设计压缩算法,而由于数据规模通常较大,以一定精度损失换取极高压缩比的有损压缩算法更广泛地被应用。

本文简单介绍了时间序列压缩任务的来源,压缩算法的分类,并对常见压缩算法的优缺点进行了简介,在CnosDB中的应用也只是略有提及,感兴趣者可以查看参考文献中的内容。

参考文献

[1] FU T-C. A review on time series data mining [J]. Engineering Applications of Artificial Intelligence,2011,24(1):164-181.

[2] WLODARCZYK T W. Overview of time series storage and processing in a cloud environment [C] // 4th IEEE International Conference on Cloud Computing Technology and Science Proceedings,[S.l.],2012:625-628.

[3] NAQVI S N Z,YFANTIDOU S,ZIMÁNYI E. Time series databases and influxdb[J]. Studienarbeit, Université Libre de Bruxelles,2017,12

[4] ANH V N,MOFFAT A. Index compression using 64-bit words[J]. Software: Practice and Experience,2010,40(2):131-147.

[5] GOLOMB S. Run-length encodings (corresp.) [J]. IEEE transactions on information theory,1966,12(3):399-401.

[6] RICE R F. Some practical universal noiseless coding techniques[M] // . 1979.

[7] CANDY J. A use of double integration in sigma delta modulation [J]. IEEE transactions on communications,1985,33(3):249-258.

[8] O’NEAL J. Differential pulse-code modulation (PCM) with entropy coding[J]. IEEE Transactions on Information Theory,1976,22(2):169-174.

[9] OSWAL S,SINGH A,KUMARI K. Deflate compression algorithm [J]. International Journal of Engineering Research and General Science,2016,4(1) :430-436.

[10] GAILLY J-L,ADLER M. GNU gzip [J]. GNU Operating System,1992.

[11] ZHANG Q,BENVENISTE A. Wavelet networks[J]. IEEE transactions on Neural Networks,1992,3(6):889-898.

[12] KINGSBURY N. Complex wavelets for shift invariant analysis and filtering of signals[J]. Applied and computational harmonic analysis,2001,10(3): 234-253.

[13] PELKONEN T,FRANKLIN S,TELLER J,et al. Gorilla: A fast, scalable, inmemory time series database [J]. Proceedings of the VLDB Endowment,2015, 8(12):1816-1827.

[14] COLLET Y,OTHERS. Lz4: Extremely fast compression algorithm[J]. code. google. com,2013.

[15]COLLET Y. Zstandard-fast real-time compression algorithm[J]. Github repository [online],2018.

[16] GUNDERSON S H. Snappy: A fast compressor/decompressor[J]. code. google. com/p/snappy,2015.

[17] CHANDAK S,TATWAWADI K,WEN C,et al. LFZip: Lossy compression of multivariate floating-point time series data via improved prediction [C] // 2020 Data Compression Conference (DCC),[S.l.],2020:342-351.

[18] LIAKOS P,PAPAKONSTANTINOPOULOU K,KOTIDIS Y. Chimp: efficient lossless floating point compression for time series databases [J]. Proceedings of the VLDB Endowment,2022,15(11):3058-3070.

[19] BLALOCK D,MADDEN S,GUTTAG J. Sprintz: Time series compression for the internet of things [J]. Proceedings of the ACM on Interactive, Mobile, Wearable and Ubiquitous Technologies,2018,2(3):1-23

CnosDB简介

CnosDB是一款高性能、高易用性的开源分布式时序数据库,现已正式发布及全部开源。

欢迎关注我们的社区网站:https://cn.cnosdb.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/196794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Python手把手教你实现flappy bird游戏

目录 前言开始前的准备工作进入正题结束语 前言 想必玩过游戏的都知道,Flappy Bird是一款简单却富有挑战性的经典的小鸟飞行游戏,让许多玩家为之痴迷,而作为开发者,那肯定要通过技术手段来再做一遍这款经典游戏。那么本文就来通…

春秋云镜:CVE-2022-28512

靶标介绍: Fantastic Blog (CMS)是一个绝对出色的博客/文章网络内容管理系统。它使您可以轻松地管理您的网站或博客,它为您提供了广泛的功能来定制您的博客以满足您的需求。它具有强大的功能,您无需接触任何代码即可启动并运行您的博客。 该…

RPG项目01_技能释放

基于“RPG项目01_新输入输出”, 修改脚本文件夹中的SkillBase脚本: using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; //回复技能,魔法技能,物理技能…

java synchronized详解

背景 在多线程环境下同时访问共享资源会出现一些数据问题,此关键字就是用来保证线程安全的解决这一问题。 内存可见的问题 在了解synchronized之前先了解一下java内存模型,如下图: 线程1去主内存获取x的值读入本地内存此时x的值为1&…

3DMM模型

目录 BFMBFM_200901_MorphableModel.matexp_pca.bintopology_info.npyexp_info.npy BFM BFM_2009 01_MorphableModel.mat from scipy.io import loadmat original_BFM loadmat("01_MorphableModel.mat") # dict_keys: [__header__, __version__, __globals__, # …

视频剪辑转码:mp4批量转成wmv视频,高效转换格式

在视频编辑和处理的领域,转换格式是一项常见的任务。在某些编辑和发布工作中,可能需要使用WMV格式。提前将素材转换为WMV可以节省在编辑过程中的时间和精力。从MP4到WMV的批量转换,不仅能使视频素材在不同的平台和设备上得到更好的兼容性&…

LoadBalancer将服务暴露到外部实现负载均衡Openelb-layer2模式配置介绍

目录 一.openelb简介 二.主要介绍layer2模式 1.简介 2.原理 3.部署 (1)先在集群master上开启kube-proxy的strictARP (2)应用下载openelb.yaml(需要修改镜像地址) (3)编写yam…

密集书库是什么意思?图书馆密集书库的书可以借出吗

密集书库是一种用于存储大量书籍和资料的高密度储存设施。它通常包括一系列钢制书架和可移动的储存架,使得书籍可以被紧密地排列和存储,以最大程度地利用存储空间。同时,密集书库还有各种自动化系统,如自动化取书系统、气候控制系…

安卓apk抓包(apk抓不到包怎么办)

起因 手机(模拟器)有时候抓不到apk的包,需要借助Postern设置一个代理,把模拟器的流量代理到物理机的burp上。 解决方案 使用Postern代理,把apk的流量代理到burp。 Postern是一个用于代理和网络流量路由的工具&#xf…

Linux Namespace技术

对应到容器技术,为了隔离不同类型的资源,Linux 内核里面实现了以下几种不同类型的 namespace。 UTS,对应的宏为 CLONE_NEWUTS,表示不同的 namespace 可以配置不同的 hostname。User,对应的宏为 CLONE_NEWUSER&#xf…

骨传导耳机会影响听力么?盘点骨传导耳机的好处与坏处都有哪些?

先说结论,使用骨传导耳机是不会影响听力的!并且由于骨传导耳机的特殊传声原理,相比于传统的入耳式耳机,骨传导耳机拥有更多的优点,下面带大家了解一下骨传导耳机的优点和缺点都有哪些。 一、骨传导耳机的优点是什么&a…

kubectl获取ConfigMap导出YAML时如何忽略某些字段

前言: 当我们在使用Kubernetes时,常常需要通过kubectl命令行工具来管理资源。有时我们也想将某个资源的配置导出为YAML文件,这样做有助于版本控制和资源的迁移。然而,默认情况下,使用kubectl get命令导出资源配置会包…

JVM:双亲委派(未完结)

类加载 定义 一个java文件从编写代码到最终运行,必须要经历编译和类加载的过程,如下图(图源自b站视频up主“跟着Mic学架构”)。 编译就是把.java文件变成.class文件。类加载就是把.class文件加载到JVM内存中,得到一…

电子取证--windows下的volatility分析与讲解

1.volatility的安装 提示:我用的是2.6版本(windows),如果直接下载的出现问题,用迅雷就可以解决 下载地址:Volatility 2.volatility的使用 1.进入终端,查看镜像的系统信息: volati…

Huawei FusionSphere FusionCompte FusionManager

什么是FusionSphere FusionSphere 解决方案不独立发布软件,由各配套部件发布,请参 《FusionSphere_V100R005C10U1_版本配套表_01》。 目前我们主要讨论FusionManager和FusionCompute两个组件。 什么是FusionCompte FusionCompute是华为提供的虚拟化软…

初识动态规划算法(题目加解析)

文章目录 什么是动态规划正文力扣题第 N 个泰波那契数三步问题使用最小花费爬楼梯 总结 什么是动态规划 线性动态规划:是可以用一个dp表来存储内容,并且找到规律存储,按照规律存储。让第i个位置的值等于题目要求的答案 >dp表:dp表就是用一…

SpringBoot——嵌入式 Servlet容器

一、如何定制和修改Servlet容器的相关配置 前言: SpringBoot在Web环境下,默认使用的是Tomact作为嵌入式的Servlet容器; 【1】修改和server相关的配置(ServerProperties实现了EmbeddedServletContainerCustomizer)例如…

PoE技术详解

标准的五类网线有四对双绞线,IEEE 802.3af和IEEE 802.3at允许两种用法:通过空闲线对供电或者数据线对供电。IEEE 802.3bt允许通过空闲线对供电、通过数据线对供电或者空闲线对和数据线对一起供电,如图16.1所示。 图 16.1 PoE供电线对 当在一…

整数的立方和

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

C++ 系列 第四篇 C++ 数据类型上篇—基本类型

系列文章 C 系列 前篇 为什么学习C 及学习计划-CSDN博客 C 系列 第一篇 开发环境搭建(WSL 方向)-CSDN博客 C 系列 第二篇 你真的了解C吗?本篇带你走进C的世界-CSDN博客 C 系列 第三篇 C程序的基本结构-CSDN博客 前言 面向对象编程(OOP)的…