首页 > 数据库 >时间序列数据库压缩

时间序列数据库压缩

时间:2023-07-04 19:32:56浏览次数:56  
标签:数据库 无损压缩 有损压缩 序列 可以 时序 数据 压缩

无损压缩

无损压缩是说被压缩的数据和解压后的数据完全一样,不存在精度的损失。对数据的压缩说到底是对数据规律性的总结。时序数据的规律可以总结为两点:1、timestamp 稳定递增、2、数值有规律性,变化稳定。下面来举个例子。

上图是一组时序数据,如果我们一行一行的看感觉压缩有点困难,但如果我们一列一列的看,压缩方案就呼之欲出了。

先看 timestamp 那一列是等差递增数列,可以用 [1467627245000,1000,4] 来表示。1467627245000 代表了第一个时间,1000 代表后一个时间比前一个时间的大 1000,4 代表了这样的规律出现了 4 次。如果一共有 100 个这样规律的 timestamp,那就意味着,我们用 3 个 Long 型就可以表示出来。timestamp 压缩率高达 33。

再进一步观察看 value 那一列,如果取差值,可以得到(6,-5,2,-5),全部都加 5 得到(11,0,7,0),这些数值都可以用 4bit 来表示。也就是用 [23,5,4,0xb0700000] 来表示(23,22,24,25,24)。其中的 4 代表后续一共有 4 个数。如果这样的规律一直维持到 100 个 Int 的 value,就可以用 16 个 Int 来代表,压缩率高达 6.3。

具体的情景会复杂很多,在此只是简单举个例子。InfluxDB 无损压缩算法在其页面上有完整的阐述(注 3),可以配合开源源码进行更加深入的理解。针对于浮点数类型,Facebook 在 Gorilla 论文中(注 4)提到的非常高效的无损压缩算法,已经有很多文章进行分析。InfluxDB 对于浮点型也采用这个算法。

 

有损压缩

有损压缩的意思是说解压后的数据和被压缩的数据在精度上有损失,主要针对于浮点数。通常都会设置一个压缩精度,控制精度损失。时序数据的有损压缩的思路是拟合。也就是用一条线尽可能的匹配到这些点,可以是直线,也可以是曲线。

最有名的时序数据有损压缩是 SOIsoft 公司的 SDA 算法,中文称为旋转门压缩算法。

在上图中,红色的点是上一个记录的点,空心的点是被丢掉的点,绿色的点是当前的点,黑色的点是当前要记录的点。

可以看到图左边,当前点和上一个记录点以及压缩精度的偏差值形成的矩形可以包含中间的点,所以这些点都是可以丢掉的。

再看图右边,当前点和上一个记录点形成的矩形无法包含中间的点,所以把上一个点记录下来。如此进行下去,可以看到,大部分的数据点都会被丢掉。查询的时候需要根据记录的点把丢掉的点在插值找回来。

有损压缩除了可以大幅减少存储成本。如果结合设备端的能力,甚至可以减少数据的写入,降低网络带宽。

总结

虽然判断压缩算法最优是不可计算的,但是设计好的压缩算法仍然是可计算的问题。可以看到,前面提到的时序数据的无损压缩有损压缩算法都会基于时序数据的特征采取方案,达到更好的压缩率。现在 deep learning 非常的火,让人很好奇它是不是可以给数据压缩带来新的方案。


标签:数据库,无损压缩,有损压缩,序列,可以,时序,数据,压缩
From: https://blog.51cto.com/u_11908275/6624566

相关文章

  • 时序数据库深入浅出之存储篇——本质LSMtree,同时 metric(比如温度)+tags 分片
    什么是时序数据库先来介绍什么是时序数据。时序数据是基于时间的一系列的数据。在有时间的坐标中将这些数据点连成线,往过去看可以做成多纬度报表,揭示其趋势性、规律性、异常性;往未来看可以做大数据分析,机器学习,实现预测和预警。时序数据库就是存放时序数据的数据库,并且需要支持时序......
  • Prüfer 序列
    简介Prüfer序列(以下为方便写作“prufer序列”)可以将一个带标号的\(n\)个结点的树用\([1,n]\)中的\(n-2\)个整数表示,也可以理解为完全图的生成树与数列之间的双射。定义prufer序列的简历过程为:选取树中所有叶子节点中编号最小的,将其的父节点加入序列末并删除该叶子节......
  • mysql数据库语法总结--存储过程、函数、视图、触发器、表
    ​概述抽空总结一下mysql的一些概念性内容,涉及存储过程、函数、视图、触发器等。一、查看存储过程、函数、视图、触发器、表1、存储过程select*frommysql.procwheretype='PROCEDURE';showprocedurestatus;showcreateprocedureproc_name;//存储过程定义​编......
  • 数据万象AVIF图片压缩 - 小程序省流量利器
    导语微信小程序因其便捷的开发环境和天然的微信生态,使得越来越多企业平台通过小程序建立自己的业务。在小程序上使用图片非常广泛,但传统格式图片(如JPG/PNG)占用空间大,加载速度慢,可能导致昂贵的图片流量支出。近年来,AVIF图片以高压缩率、优良画质成为省流量的新选择。本文将介绍......
  • 数据库内核:PostgreSQL 事务
    事务处理事务简介事务是一个应用层面的操作,通过一系列的数据库操作执行。一个事务会影响数据库的状态。对于事务来说,会有很多限制,这些限制实质上是保障整个数据库的状态是合乎标准的,但是在执行事务期间,可能会有一部分限制被打破,但是如果该事务是合法的,那么在完成或放弃当前......
  • 时序数据库 TDengine 与 DBeaver 达成合作,生态系统再壮大
    众所周知,DBeaver是一个流行的开源数据库管理和SQL客户端工具,为管理和使用各种类型的数据库(包括多个时序数据库)提供强大而灵活的平台。为了让大家在应用上更加便捷,我们与DBeaver达成合作,新发布的DBeaver23.1.1版本正式支持时序数据库(TimeSeriesDatabase)TDengine和全托......
  • GGTalk 开源即时通讯系统源码剖析之:数据库设计
    自从《开源即时通讯GGTalk8.0发布,增加Linux客户端,支持在统信UOS、银河麒麟上运行!》一文在博客园发布后,有园友联系我QQ,说能不能整理个更系统更详细地介绍GGTalk源码的文章,现在博客中的介绍比较零散,对于初级程序员而言,面对GGTalk大量的源码,有点不知所措。想想也是如此,于是,我打算写......
  • Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、防盗链、SSL、性能优化
    Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、防盗链、SSL、性能优化...架构营 2023-07-0307:10 发表于上海收录于合集#nginx2个#架构172个#web2个引言一、性能怪兽-Nginx概念深入浅出二、Nginx环境搭建三、Nginx反向代理-负载均衡......
  • 如何使用libswscale库将YUV420P格式的图像序列转换为RGB24格式输出?
    一.视频格式转换初始化将视频中的图像帧按照一定比例缩放或指定宽高进行放大和缩小是视频编辑中最为常见的操作之一,这里我们将1920x1080的yuv图像序列转换成640x480的rgb图像序列,并输出到文件。视频图像转换的核心为一个SwsContext结构,其中保存了输入图像和输出图像的宽高以......
  • 数据库之“语句查询字符串长度大于、小于或等于指定值”
    在MySQL中查询字符串长度使用length关键字,具体用法如下:先了解一下,Mysql中length()、char_length()的区别。length():mysql里面的length()函数是一个用来获取字符串长度的内置函数。char_length():在mysql内置函数里面查看字符串长度的还有一个函数是char_length()。这两个函数的区......