Differential Encoding

百度百科:

差分编码(differential encoding)指的是对数字数据流,除第一个元素外,将其中各元素都表示为各该元素与其前一元素的差的编码。

差分编码,又称增量编码,是以序列式资料之间的差异储存或传送资料的方式(相对于储存传送完整档案的方式)。在需要档案改变历史的情况下的差分编码有时又称为差分压缩。差异储存在称为“delta”或“diff”的不连续档案中。由于改变通常很小(平均占全部大小的2%),差分编码能大幅减少资料的重复。一连串独特的delta档案在空间上要比未编码的相等档案有效率多了。

差分编码的简单例子是储存序列式资料之间的差异(而不是储存资料本身):不存“2, 4, 6, 9, 7”,而是存“2, 2, 2, 3, -2”。单独使用用处不大,但是在序列式数值常出现时可以帮助压缩资料

差分编码是一个数字编码技术,我们熟悉的相关应用是差分曼彻斯特编码:每位中间的跳变仅提供时钟定时,而用每位开始时有无跳变表示"0"或"1",有跳变为"0",无跳变为"1"。

前面提到 “差分编码在序列式数值常出现时可以帮助压缩资料”,是否在存储领域或其他领域有所应用?

clfB-tree: Cacheline Friendly Persistent B-tree for NVRAM(ACM Trans 2018) 对 B-tree 节点应用了差分编码的思想,压缩键/指针的大小以存储更多条目。

clfB-tree with Differential Encoding

clfB-tree 是一种 b 树结构,它的树节点适合于单个缓存线。因为缓存线是32字节或64字节,所以不能容纳大量的条目。为了在clfB-tree 节点中存储更多的条目,提出了差分编码:计算第一个键/指针和其他键/指针之间的差值,并且只将差值存储在树节点中。使用差分编码,可以减少每个键和指针使用的字节数,从而在树节点中存储更多的条目。

如果缓存行大小为 64 字节,键和指针为 8 字节,那么树节点的度仅为 4,使得树的高度非常高。
根据 B-tree 的性质,树节点通常存储类似的键和指针(键是相似的;堆管理器通常分配连续的内存块导致内存地址相似)。
因此 clfB-tree 用更少的字节计算和存储键和指针之间的差异,而不是存储整个键和指针,可以有效地压缩键和指针,提高树节点的利用率。

上图显示了一个 clfB-tree 内部节点的布局。clfB-tree 内部节点的大小设置为缓存行大小(示例中为64字节)。前两个字节存储关于树节点的元数据。第一个字节指示树节点是叶节点还是内部节点,以及树节点中有多少个键。第二个字节存储用于编码指针和键的字节数。

第一个指针/键正常存储。对于其余的指针和键,计算与第一个值的差值,并确定需要多少字节来存储最大差值。

如果指针编码和键编码都需要每个 1 字节,那么 64 字节的树节点可以有最多 23 个键和 24 个子指针。可以进一步以位为单位压缩键、指针和元数据,按位编码需要更多的计算,并且降低了整体索引性能。
最坏的情况下,尽管不太可能,但差分编码存储指针和键仍然需要8个字节。此时 64 字节的树节点最多可以保存 3 个键和 4 个子指针。

如果一个键是字符串类型,大于缓存线,可以像前缀 B-tree(prefix B-tree)一样将键都有的前缀字符串存储在一个单独的内存块,所有键只需存储不同的字符串。


参考:
百度百科
clfB-tree: Cacheline Friendly Persistent B-tree for NVRAM

差分编码 Differential Encoding相关推荐

  1. pandas读取csv文件发生编码(encoding)错误:获取文件编码格式之后再读取文件

    pandas读取csv文件发生编码(encoding)错误:获取文件编码格式之后再读取文件 目录

  2. 机器学习类别/标称(categorical)数据处理:目标编码(target encoding)

    机器学习类别/标称(categorical)数据处理:目标编码(target encoding) 序号编码:序号编码通常用于处理类别间具有大小关系的数据 可以通过导入sklearn.preproces ...

  3. 机器学习类别/标称(categorical)数据处理:序号编码(Ordinal Encoding)

    机器学习类别/标称(categorical)数据处理:序号编码(Ordinal Encoding) 序号编码:序号编码通常用于处理类别间具有大小关系的数据 可以通过导入sklearn.preproce ...

  4. Python 定义源码编码 (Source Encoding)

    Python 定义源码编码 (Source Encoding) import chilkat someBytes = chilkat.CkByteData() someBytes.append('\x ...

  5. 数据结构C#版笔记--啥夫曼树(Huffman Tree)与啥夫曼编码(Huffman Encoding)

    哈夫曼树Huffman tree 又称最优完全二叉树,切入正题之前,先看几个定义 1.路径 Path 简单点讲,路径就是从一个指定节点走到另一个指定节点所经过的分支,比如下图中的红色分支(A-> ...

  6. 独热编码 (One-Hot Encoding) 介绍及MATLAB命令

    独热编码 (One-Hot Encoding) 介绍及MATLAB实现 文章目录 独热编码 (One-Hot Encoding) 介绍及MATLAB实现 1 独热编码 (One-Hot Encodin ...

  7. 语音差分编码(DPCM)的实现与改进——Python实现

    介绍 这是视听觉信号处理的第二个实验--语音差分编码(DPCM).总体来讲,思路上还是比较简单的,很容易理解.如果编程能力好的话,相信很快就能完成.奈何我太菜了,写了几个晚上才算搞定.做了点扩展,添加 ...

  8. python3默认使用的编码是_Python3.x默认使用的编码是encoding

    Python3.x默认使用的编码是encoding 与有理正切加网相比,使用超细胞结构加网的原因是().A:弥补有理正切的缺陷B:不能通过增加网格中记录栅格的办法来实现15度C:得到的网点形状更好D: ...

  9. python哈夫曼编码注意_Python 算法(2) 哈夫曼编码 Huffman Encoding

    这个问题原始是用来实现一个可变长度的编码问题,但可以总结成这样一个问题,假设我们有很多的叶子节点,每个节点都有一个权值w(可以是任何有意义的数值,比如它出现的概率),我们要用这些叶子节点构造一棵树,那 ...

  10. 独热编码(One-Hot Encoding)

    [概念] One-hot encoding是只存在一个1其余全为0的n位序列.也可以称它为二元向量,二元就是里面只有0和1.通常被用来描述一个状态机的某个状态. [用处] 用于处理离散型特征.通过将离 ...

最新文章

  1. jQuery学习笔记(五六)——高级事件
  2. 在SQLMAP中使用动态SQL
  3. ListView通过自定义适配器来显示数据并对Item项以及子view项的控件实现监听.
  4. 011_Vue自定义指令
  5. c++ standard library_什么是C/C++的标准库?
  6. iOS开发 小知识点
  7. origin三元相图_扩增子图表解读7三元图:三组差异数量和关系
  8. 菜鸟请教高手web开发内存问题?
  9. 7-9 一元多项式的乘法与加法运算 (20 分)
  10. 對比加班時間和考勤時間,得出實際加班時長函数
  11. 微商选择满意商品的方法
  12. Cocoa-专业术语
  13. 邮件客户端 gmail hotmail
  14. 设计模式之美总结(结构型篇)
  15. web前端面试题— 简答题
  16. java面试项目中遇到什么问题,大量教程
  17. 飞鱼游戏校招美术上岸指南?看这篇就够
  18. 机器学习模型 知乎_深度剖析知乎目前的内容架构模型
  19. FP-growth 算法与Python实现
  20. vscode配置java_VS Code 配置 Java IDE

热门文章

  1. 水电图纸——总配电箱——1
  2. 文件对比软件 Beyond Compare 4 破解
  3. 动态规划——一维dp数组与二维dp数组
  4. As a good Java programer
  5. 管家婆软件显示服务器连接失败,管家婆软件提示“连接服务器失败”怎么办
  6. android webview权限申请_android WebView全面总结
  7. MySQL InnoDB中的锁-间隙锁(Gap Lock)
  8. Mac 抓包工具Charles4.0.2破解版,安装使用
  9. STM32接入机智云--实现数据上传和命令下发
  10. 微软上架激活工具,自己破解自己?