• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
将者,智、信、仁、勇、严也。
Hi,我是李智华,华为-安全AI算法专家,欢迎来到安全攻防对抗的有趣世界。
博客园    首页    新随笔    联系   管理    订阅  订阅

为什么倒排索引不采用zlib这样的字典压缩算法——因为没法直接使用啊

看了下压缩算法的发展历史,根据倒排索引的数据结构特点,个人认为zstd不适合做倒排索引压缩,举例说明下:

假设有一份文档倒排列表为:[300, 302, 303, 332],对于这组倒排数据,是没法***直接***采用zstd这类字典压缩算法的,因为里面没有重复数据(字典压缩通常重复数据较多,例如一个重复单词较多的txt文档适合zstd字典压缩)。

但是,如果对他们做差值运算后变为[300, 2, 1, 29],实际上你会发现2,1,29这些数字比原始数据小得多而可以用更少的位数来存储。这就是目前倒排索引使用的压缩算法原理。

 

综上所述,es里原始数据其实比较适合zstd算法,但是由于其内置了Lz4,替换的价值不大。

补充:

 

(1)压缩算法的发展历史(见:http://blog.csdn.net/kimylrong/article/details/39405981 ),压缩算法的分类如下:

Lossless

 

Entropy type

  • Unary
  • Arithmetic
  • Asymmetric Numeral Systems
  • Golomb
  • Huffman 
    • Adaptive
    • Canonical
    • Modified

 

  • Range
  • Shannon
  • Shannon–Fano
  • Shannon–Fano–Elias
  • Tunstall
  • Universal 
    • Exp-Golomb
    • Fibonacci
    • Gamma
    • Levenshtein

 

Dictionary type

  • Byte pair encoding
  • DEFLATE
  • Snappy
  • Lempel–Ziv 
    • LZ77 / LZ78 (LZ1 / LZ2)
    • LZJB
    • LZMA
    • LZO
    • LZRW
    • LZS
    • LZSS
    • LZW
    • LZWL
    • LZX
    • LZ4
    • Brotli
    • Statistical
    • Zstd

 

Other types

  • BWT
  • CTW
  • Delta
  • DMC
  • MTF
  • PAQ
  • PPM
  • RLE

 

其中,熵编码方法是倒排索引压缩普遍采用的算法,例如上面标红的golomb或者Shannon–Fano–Elias算法,而字典压缩是一般性数据的压缩。

 

(2)倒排索引压缩的算法历史(见:http://www.cnblogs.com/bonelee/p/6879663.html )

posted @ 2017-05-25 15:25  bonelee  阅读(1167)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3