简单易懂的时序数据压缩算法分析

TableStore时序数据存储 - 架构篇 摘要: 背景 随着近几年物联网的发展,时序数据迎来了一个不小的爆发。从DB-Engines上近两年的数据库类型增长趋势来看,时序数据库的增长是非常迅猛的。在去年我花了比较长的时间去了解了一些开源时序数据库,写了一个系列的文章(综述、HBase系、Cassandra系、InfluxDB、Prometheus),感兴趣的可以浏览。 背景 随着近几年物联网的发展,时序数据迎来了一个不小的爆发。从DB... 阅读详情

背景

今年在公司内部主导了两个的行情数据系统的构建,两者均使用到了常见的时序数据压缩算法。

这里简单总结一下过程中积累的一些经验。

让我们先来思考一个问题:压缩算法生效的前提是什么?

数据本身至少要符合以下两种特性其一:

  • 数据存在冗余
  • 数据符合特定的概率分布

在时序数据领域,数据冗余度与相似度较高,因此天生适合进行压缩。

但对于不同类型的数据,其所适用的压缩算法也大相径庭。

下面我们逐一介绍这些数据相应的压缩算法。

整数

整型数据是构建各种应用的基石,时序型应用也不例外。

在行情数据中,存在大量的整型数据,例如:逐笔成交中的时间戳、成交量。

根据压缩算法的不同,可以将整型数据分为以下 3 类:

  • 无符号整型 —— Varint
  • 有符号整型 —— ZigZag
  • 时间戳 —— Delta2 + Simple8b

Varint

一个 32 位的无符号整型能表达 0 - 4294967295 之间的任意数字

但这些数字在日常生活中出现的概率并不是均匀分布的,一个著名的例子是 本福特定律 ,该定律常被用于辨别数据的真伪。

通常情况下,较小的数字出现的概率会高于极大的数据。

以年龄为例,无论人口如何分布,大部分人的年龄都位于 0 ~ 100 之间。

表示 128 仅需要 7bit 足矣,如果使用 32bit 的无符号整型进行存储,意味着至少浪费了 24bit。

幸运的是,我们能通过一种自适应编码方式来减少这种浪费 —— Varint。

public class VarIntCodec {

    static int encodeInt(int v, byte[] bytes, int offset) {
        if (v < 0) {
            throw new IllegalStateException();
        } else if (v < 128) {
            bytes[offset++] = (byte) v;
        } else if (v < 16384) {
            bytes[offset++] = (byte) (v | 0x80);
            bytes[offset++] = (byte) ((v >>> 7) & 0x7F);
        } else if (v < 2097152) {
            bytes[offset++] = (byte) (v | 0x80);
            bytes[offset++] = (byte) ((v >>> 7) | 0x80);
            bytes[offset++] = (byte) (v >>> 14);
        } else if (v < 268435456) {
            bytes[offset++] = (byte) (v | 0x80);
            bytes[offset++] = (byte) ((v >>> 7) | 0x80);
            bytes[offset++] = (byte) ((v >>> 14) | 0x80);
            bytes[offset++] = (byte) (v >>> 21);
        } else {
            bytes[offset++] = (byte) (v | 0x80);
            bytes[offset++] = (byte) ((v >>> 7) | 0x80);
            bytes[offset++] = (byte) ((v >>> 14) | 0x80);
            bytes[offset++] = (byte) ((v >>> 21) | 0x80);
            bytes[offset++] = (byte) (v >>> 28);
        }
        return offset;
    }

    static int decodeInt(byte[] bytes, int[] offset) {
        int val;
        int off = offset[0];
        byte b0, b1, b2, b3;
        if ((b0 = bytes[off++]) >= 0) {
            val = b0;
        } else if ((b1 = bytes[off++]) >= 0) {
            val = (b0 & 0x7F) + (b1 << 7);
        } else if ((b2 = bytes
Hadoop生态中的时序分析:HBase时序数据存储优化方案 时序数据(Time Series Data)是指按照时间顺序记录的一系列数据点,广泛应用于物联网、金融交易、系统监控等领域。随着大数据时代的到来,时序数据的规模呈爆炸式增长,传统的关系型数据库已难以满足海量时序数据的存储和分析需求。本文旨在探讨如何在Hadoop生态系统中,利用HBase这一分布式NoSQL数据库高效存储和处理时序数据,并提出一系列经过实践验证的优化方案。本文首先介绍时序数据的特性和HBase的基本原理,然后深入分析HBase在时序数据存储中的关键挑战。 阅读详情

相关推荐

如何更高效地压缩时序数据?基于深度强化学习的探索

简介: 随着移动互联网、IoT、5G 等的应用和普及,一步一步地我们走进了数字经济时代。随之而来的海量数据将是一种客观的存在,并发挥出越来越重要的作用。时序数据是海量数据中的一个重要组成部分,除了挖掘分析预测等,如何高效的压缩存储是一个基础且重要的课题。同时,我们也正处在人工智能时代,深度学习已经有了很多很好的应用,如何在更多更广的层面发挥作用?本文总结了当前学术界和工业界数据压缩的方法,分析了大型商用时序数据压缩的特性,提出了一种新的算法,分享用深度强化学习进行数据压缩的研究探索及取得的成果。 

阿里云开发者 2561

HBase表压缩算法选型与空间优化实践

数据压缩是提升分布式存储系统效率的核心技术之一,通过特定算法减少数据物理存储空间。在Hadoop生态中,HBase作为列式数据库,其压缩策略直接影响存储成本和IO性能。主流压缩算法如ZSTD、Snappy等在压缩率、CPU开销和读写延迟上呈现不同特性,例如ZSTD可实现3.8:1的高压缩比,而Snappy则适合低延迟场景。工程实践中需结合数据特征(如时序数据的高重复性)和硬件资源进行选型,配合数据块编码(FAST_DIFF)和冷热分层存储可进一步优化。合理的压缩配置能降低PB级集群40%存储开销,同时通过M

weixin_29297127的博客 337

TDengine存储压缩机制详解:如何将时序数据存储成本降低90%

时序数据以高频率、仅追加、时间有序为特征,在物联网与工业监控中,设备规模扩大将催生日均数亿条写入,传统行式数据库因重复字段和索引开销导致存储膨胀。列式存储将同列连续存放,配合差值编码、浮点压缩等专用算法,可大幅去除时序数据中的冗余。TDengine作为专用时序数据库,通过一表一测点模型剥离静态标签,叠加两级压缩、时间分片与保留策略,可将存储成本降低约90%。围绕建库参数、超级表设计、多级存储与压缩率验证,介绍可落地的存储优化方法与常见误区。

weixin_42599558的博客 89

时序数据库在数据库领域的应用前景

时序数据库(Time Series Database, TSDB)作为专门处理时间序列数据的数据库系统,正在成为大数据时代的关键基础设施。理解时序数据的特性和管理挑战掌握时序数据库的核心技术原理了解主流时序数据库产品的比较优势评估时序数据库在不同行业的应用价值把握时序数据库的未来发展方向本文首先介绍时序数据库的基本概念和技术背景,然后深入分析其核心架构和关键技术,接着通过实际案例展示应用场景,最后探讨未来发展趋势。背景介绍:定义时序数据和时序数据库。

2502_91592937的博客 1133

差分压缩算法在实时数据传输中的高效应用

本文深入探讨了差分压缩算法在实时数据传输中的高效应用。该算法通过仅传输数据的变化量(增量更新),而非完整数据块,显著降低了在线协作白板、多人游戏、金融行情推送等场景的带宽占用与传输延迟。文章详细解析了其核心原理、实战优化策略(如降低延迟、节省带宽、提升可靠性),并提供了完整的代码示例与选型指南,帮助开发者将这一“省流神器”融入现代网络架构。

weixin_29054195的博客 462

时序数据压缩实战:Delta、Zig-Zag与Simple-8B编码原理与应用

数据压缩是提升存储效率与查询性能的核心技术,其原理在于通过特定算法消除数据冗余。在时序数据场景中,数据点按时间顺序到达且数值变化平滑,这为专用编码技术创造了条件。Delta编码通过存储差值将大数值转换为小数值,而Zig-Zag编码则将有符号整数映射为紧凑的无符号整数,两者结合为高效压缩奠定基础。Simple-8B等位打包算法进一步将多个小整数高效封装,显著提升压缩率与解压速度。这些技术对于物联网、监控系统等产生海量时间序列数据的应用至关重要,能有效降低存储成本并支持快速查询。本文以Delta编码和Simpl

weixin_29196891的博客 328

时序数据压缩编码实战:Delta、Zig-Zag与Simple-8B算法解析

数据压缩是计算机科学中提升存储与传输效率的核心技术,其基本原理是通过特定算法减少数据的冗余表示。在时序数据场景下,数据点按时间戳严格递增且数值高度相关的特性,为专用压缩算法提供了巨大的优化空间。这类算法的技术价值在于,它们能够实现极高的压缩比,同时保持较低的编解码开销,从而直接提升数据库的写入吞吐量与查询响应速度。在物联网设备监控、金融行情分析、运维指标采集等高频数据生成的应用场景中,高效的时序压缩技术是构建可扩展数据系统的基石。本文聚焦于Delta编码、Zig-Zag变换与Simple-8B整数组打包等关

weixin_29205061的博客 240

一文搞懂大数据时序分析的体系架构

时序数据(Time Series Data)是按时间顺序记录的一系列观测值,通常具有以下数学定义:其中 ( t_i ) 是单调递增的时间戳(通常为Unix时间戳,精确到秒或毫秒),( v_i ) 是对应时间点的度量值(可以是数值、布尔值或字符串)。在实际场景中,时序数据通常包含三要素时间戳(Timestamp):数据产生的具体时间度量值(Metric/Value):核心观测指标(如温度、CPU使用率、股价)标签(Tags/Labels):描述数据维度的元数据(如设备ID、机房位置、股票代码)

AI天才研究院 1730

ByteBuffer实现Beringei压缩算法与一点心声

目录 背景简介 背景资料 编程思路 代码实现 背景简介 Gorilla是Facebook内部使用且已开源的时序数据库的软件原型,该时序库主要是针对互联网系统的基础监控,主要目的在于对海量时序数据进行快速入库,快速聚合查询,秒级响应前端呈现;优点在于节省了网络传输带宽和存储带宽。 但是,Gorilla的具体实现Beringei,考虑详尽,依赖众多,是一个大型的C++工程。菜鸟一枚...

暗焰之珩的博客 1485

【项目实战】TDengine是一款专门为时序数据设计的数据库,它具有高效的压缩功能,可以显著减少存储空间的使用。TDengine 的压缩比例取决于多种因素,包括数据的特性、压缩算法选择以及数据库配置

TDengine 是一款专门为时序数据设计的数据库,它具有高效的压缩功能,可以显著减少存储空间的使用。TDengine 的压缩比例取决于多种因素,包括数据的特性、压缩算法的选择以及数据库的配置。TDengine 的压缩比通常在 5:1 到 10:1 之间,具体压缩效果取决于数据特性和压缩算法的选择。根据你的数据量 4.7 GB,压缩后的数据大小可能在 0.47 GB 到 0.94 GB 之间。

奶爸的编程之路,也就一周冷个三天 307

高效的大型时间序列数据压缩方法 MidiMax 压缩算法 | 让时间序列可视化更容易

高效的大型时间序列数据压缩方法 MidiMax 压缩算法 | 让时间序列可视化更容易

叶庭云 成为自己的光 2386

数据库领域下的时序数据库数据处理

时序数据库(Time Series Database, TSDB)是专门为处理时间序列数据而优化的数据库系统。随着物联网、DevOps监控、金融科技等领域的快速发展,时序数据的规模和重要性呈指数级增长。时序数据的独特特性和处理挑战时序数据库的核心架构设计高效的时序数据存储和查询技术实际应用场景和性能优化策略本文首先介绍时序数据的基本概念和特点,然后深入分析时序数据库的存储引擎、压缩算法和查询优化技术。接着通过实际案例展示时序数据库的应用,最后讨论未来发展趋势。

2502_91592937的博客 1170

基于RocksDB的时序数据存储引擎轻量级实现:Python大数据分析实践

时序数据(Time-Series Data)在物联网、金融量化、APM监控、智能制造等领域呈爆炸式增长,对其存储引擎的写入吞吐、压缩比和查询延迟提出了严苛要求。RocksDB作为基于LSM树的高性能键值存储库,凭借优异的顺序写入性能和可扩展性,成为构建时序存储引擎的理想底层组件。然而,直接使用RocksDB的纯KV接口处理带有时间戳的复杂查询(如时间范围扫描、聚合下推、标签过滤)存在语义鸿沟。本文从零开始,基于Python的绑定库,设计并实现一套轻量级但功能完备的时序数据存储引擎——TinyTSDB。

2201_76125261的博客 172

谷歌学术用publish-or-perish来对引用量排序

用谷歌学术搜索文献的时候发现不能按照引用量高低进行排序,网上提供了这个软件。 下载地址如下:Publish or Perish (harzing.com)https://harzing.com/resources/publish-or-perish 关于软件界面页面和各种指标的介绍,可以参考中科大的这个PPT: 文献分析软件——publish or perish(精品·公开课件).ppt (book118.com)https://max.book118.com/html/2018/1124/813

m0_48878989的博客 1万+

benders分解算法 逻辑思路整理(加星)

一般我们经常可以看到的是经典的benders,此处我也结合经典的benders梳理下思路。

sinat_41348401的博客 7992

PotPlayer终极画质调校:深入MadVR渲染器设置,让你的显示器发挥100%潜力

本文深入探讨了如何通过MadVR渲染器优化PotPlayer的画质设置,充分发挥高端显卡和显示器的潜力。从色彩空间匹配、色深优化到HDR元数据处理,提供了一套完整的配置指南,帮助用户实现影院级视觉体验。特别适合拥有NVIDIA RTX或AMD RX系列显卡的用户进行精细调校。

weixin_42530458的博客 603

微信小程序一键登录和临时code用JWT进行微信用户授权

2、跨域进行调用接口时候,唯一标识UnionID和会话密钥 session_key如果还是用的我自己的,会出现无法调用微信服务器接口,就需要将唯一标识和会话密钥换成前端的,才可以,我自己认为这样很不合理,暂时还没有找到原因。2、能够获取到openId,但是也只能获取到openid,无法获取用户的相关信息,经过查阅官网发现,现在微信那边已经将用户信息加密,需要调用提供的接口进行解密然后获取用户数据,问题原因已经找到解决方法,还未即使更改。1、我这是一台电脑实现的前端调用后端接口,不用考虑跨域的问题。

qq_67653492的博客 5717

手把手教你用THS4551搭建全差分放大器电路(附ADC驱动实战)

本文详细介绍了如何使用TI的THS4551全差分放大器搭建高性能ADC驱动电路,涵盖芯片选型、电路配置、PCB布局及实战调试等关键环节。THS4551凭借其优异的共模抑制比和宽电源电压范围,成为驱动16位及以上精度ADC的理想选择,特别适合工业应用场景。

weixin_30338481的博客 282

CollisionLoss 设计与实现原理说明

文章摘要 CollisionLoss是一种用于自动驾驶轨迹规划的碰撞惩罚损失函数,其核心思想是用多个沿车身纵轴排列的圆盘来近似表示车辆(Oriented Bounding Box)。该设计通过圆盘间的距离计算实现碰撞检测,具有以下特点: 可微性:圆盘距离计算处处可微,便于梯度回传,而传统矩形碰撞检测(分离轴定理)不可微且计算复杂。 多圆盘设计:沿车身纵向排列多个圆盘能更精确地拟合细长车体,避免单圆盘过度膨胀导致的误报。 安全覆盖:圆盘半径经过数学推导,确保完全覆盖车体矩形,避免漏检(宁可保守)。 软惩罚机制

@bangbang的博客 97

华为OD新系统机试真题 - 准备生日礼物(Py/Java/C/C++/Js/Go)

华为OD机试新系统真题 4.8【准备生日礼物】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【准备生日礼物】

qq_45776114的博客 1484

基于STM32设计的数字电子秤

当前项目是采用采用STM32+称重模块+OLED实现了简单的电子秤项目,称重模块上采用24位的ADC芯片,精度较高。实现了称重,校准、去皮等功能。

1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: 如何获取GC(垃圾回收器)的STW(暂停)时间?
下一篇: 一文精通HashMap灵魂七问,你学还是不学
JavaMonsterr
博客等级 码龄4年 211粉丝 481原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值