看我72变,阿里HBase数据压缩编码探索

  • 时间:
  • 浏览:2



开源hbase通常使用的LZO压缩不可能 Snappy压缩。这四种 压缩的同時 特点是都追求较高的压缩解压层厚,并实现合理的压缩率。然而,随着业务的快速增涨,如此来太久的业务不可能 不可能 存储水位难题而扩容。hbase针对这一具体情况,采用了基于跨集群分区恢复技术的副本数优化、机型升级等优化手段,但依然无法满足存储量的快速膨胀,一些人一直致力于寻找压缩更高的压缩最好的办法。

通过Indexable Delta EncodingHFile的随机seek性能相对于使用事先 翻了一倍,以64K block为例,随机seek性能基本与不做encoding相近.在全cache命中的随机Get场景下,相对于Diff encoding rt下降80%,但存储开销仅仅提高3-5%。Indexable Delta Encoding目前已在线上多个场景应用,经受了双十一的考验。以风控集群为例,双集群双十一高峰期访问量接近,但不可能 上线Indexable Delta Encoding的集群在访问量稍多的具体情况下,平均读rt减少10%-15%。

Zstandard(缩写为Zstd)是四种 新的无损压缩算法,旨在提供快速压缩,并实现高压缩比。它既不像LZMA和ZPAQ那样追求尽不可能 高的压缩比,一些像LZ4那样追求极致的压缩层厚。这一算法的压缩层厚超过80MB/s, 解压层厚超过80MB/s,基本能否满足目前hbase对吞吐量的需求。经验证,Zstd的数据压缩率相对于Lzo基本能否提高25%-80%,对于存储型业务,这就意味分析三分之一到四分之一的的成本减少。

通过线上数据验证,DIFF encoding能否减少2-5倍的数据量。



DIFF 编码事先 ,对某个文件的seek暗含以下两步:

目前,2017年双11,ZSTD不可能 在线上全面铺开,已累计优化存储超过2.5PB,预计全面推开后,节约存储空间超过15PB。LZ4一些可能 在每种读要求较高业务上线。

下图为某监控类应用zstd压缩算法后,集群整体存储量的下降具体情况。数据量由80+T减少到75T。

如此在解压缩时,为社 会么会判断和上个KV的键长否是一样,值长否是一样,写入的时间戳究竟是是原值还是差值呢?哪几个后要通过最早写入的2个字节的flag来实现的,

这一字节中的8位bit,含义是:

通用压缩是数据库减少存储的重要手段,在hbase中也地处广泛应用。通常数据库都地处数据块的概念,针对每个块做压缩和解压。块越大,压缩率越高,scan throughput增加;块越小,latency越小。作为四种 Tradeoff,线上hbase通常采用64K块大小,在cache中不做压缩,仅在落盘和读盘时做压缩和解压操作。

而在另四种 具体情况下,每种表存储量较小,但qps大,对rt要求极高。针对这一场景,一些人引入了lz4压缩,其解压层厚在每种场景下能否达到lzo的两倍以上。一旦读操作落盘都要解压缩,lz4解压的rt和cpu开销都明显小于lzo压缩。



从性能层厚考虑,hbase通常都要将Meta信息装载进block cache。不可能 将block大小较小,Meta信息较多,会老出Meta无法全部装下 Cache的具体情况, 性能下降。不可能 block大小较大,DIFF Encoding顺序查询的性能会成为随机读的性能瓶颈。针对这一具体情况,一些人开发了Indexable Delta Encoding,在block内部内部结构也能否通过索引进行快速查询,seek性能有了较大提高。Indexable Delta Encoding原理如图所示:



在通过BlockIndex找到对应的数据块后,一些人从数据块末尾找到每个全部KV的offset,并利用二分查找快速定位到符合查询条件的全部kv,再顺序decode每2个Diff kv,直到找到目标kv位置。

hbase作为四种 schema free的数据库,共要传统的关系型数据库更加灵活,用户后要设计好表的型态,也能否在同一张表内写入不同schema的数据。然而,不可能 缺少数据型态的支持,hbase都要一些一些额外的数据型态来标注长度信息,且无法针对不同的数据类型采用不同的压缩最好的办法。针对这一难题,hbase提出了编码功能,用来降低存储开销。不可能 编码对cpu开销较小,而效果较好,通常cache中也会开启编码功能。

性能优化和用户体验,一直是阿里hbase的团队不懈的追求。一些人一直在不断丰沛 个人的武器库,努力做最好的海量数据在线存储产品。欢迎对hbase实现,使用有任何难题的同学联系一些人.

你可曾遇到这一需求,必须几百qps的冷数据缓存,却不可能 存储水位要浪费几十台服务器?你可曾遇到这一需求,几百G的表,都要纯cache命中,性能并能满足业务需求?你可曾遇到,几十M的小表,不可能 qps不足英文,都要不停的split,balance,利用多台服务器来抗热点?

面对复杂化的场景,Ali-HBase团队一直致力于为业务提供更多的挑选和更低的成本。本文主要介绍了hbase目前四种 提高压缩率的主要最好的办法:压缩和DataBlockEncoding。

以线上几种典型数据场景为例,看看几种压缩的实际压缩率和单核解压层厚(以下数据均来自于线上)

一些人通过一张图片直观的展示各种压缩算法的性能:



hbase很早就支持了DataBlockEncoding,也一些是通过减少hbase keyvalue中重复的每种来压缩数据。 以线上最常见的DIFF算法为例,某kv压缩事先 的结果: