一、主题

  标题上也说了,关于对时间序列数据进行压缩的一种对经典重复数据删减的改进版,并能够对压缩后的数据进行随机访问而不用解压缩;

期刊:IEEE INFOCOM 2020 A类

二、动机

  目前并不仅仅停留在为了存储而压缩,有时候是为了应用的持续访问,所以设计的方法是针对压缩数据进行持续的低成本随机访问,避免解压缩;尤其对于时间序列,海量性导致其必须压缩存储,而这又大大提高了随机访问成本;
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_时间序列
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_重复数据_02
  可以看出这种对压缩后数据的随机访问技术该是比较少的,大多是字符串的;作者也很新颖,换了场景,选择单独针对时间序列数据进行分析;

三、创新点
  • 利用启发式算法对经典的重复数据删除进行改进;
  • 降低对压缩后数据随机访问的成本,减少存储的同时有利于应用的持续访问;而通用压缩方法进行随机访问就是对原有数据进行分割再分别进行压缩,随机访问时需要解压缩整个块,大大增大访问成本;
  • 在压缩比和随机访问之间进行权衡,该方案非常适合存储大量的时间序列数据;海量性->压缩->随机访问困难;
四、想法
  1. 既然支持随机访问的无损压缩能够实现,那么有损压缩必然也能实现,况且工业互联网中对数据的有损压缩同样是可行的。本文根据相关性对偏差进行排序,那么我无损压缩的话也可以从这一块入手,考虑换种方式或者直接丢弃一些相关性差的以达到更高的压缩率;
  2. 或者提出一个无损压缩和有损压缩结合的方法;
  3. 作者此处的训练数据必须在一定程度上代表数据的结构,而现实中的工业数据集则不一定满足这样的条件;
五、原理
  • F表示未压缩,Fc表示已压缩;
  • 文件都是一连串的二进制数字,所以可以用 V=[v0,v1,…vn-1]表示;Vab=[va,va+1,…,vb];
  • 数据块用z∈Z表示(Z是所有可能块的集合),利用转换函数φ(z)将一个文件块z∈Z => (x,y)∈ X x Y;其中x是z的基base,而y是z的偏差deviation;

5.1 准备工作

  存储过程类似于经典的重复数据删除,当Client上传一个文件时,会被分成几个块,转换函数不会立即存储块,而是对每个块应用变换函数,得到(基,偏差),Server对基应用重复数据删除,确保每个基只存储一次,偏差被完全存储在基的ID旁边,方便对原始块的复原;

  如果所选的转换函数将几个相似的块转换为单个基和不同的(小)偏差,则广义重复数据消除将获得压缩增益;最优变换函数将取决于数据的结构,首先考虑一个简单的转换函数:
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_时间序列_03
  相当于把z的前k位用作基,剩下的n-k位将是偏差;即z∈F2n,x∈F2k,y∈F2n-k

  φ-1(φ(z))=z,这是可逆的,所以适用于无损压缩;其次,为了提高匹配的字符个数,使用置换Permutation的方法,将前面n-k个字符放到最后;
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_随机访问_04

5.2 压缩

1 预处理:确定压缩的关键参数

需要确定的参数有:

  • 每个数据块所要连接的样本数,即c ;
  • 存放偏差的位的索引集合 Ι ;

  使用数据开始时的训练数据来完成,显然,训练数据必须在一定程度上代表数据的结构,假设第一个文件包含N1个样本,这将用于作者的参数估计。如果N1>106样本,作者将其限制在这个数量上,以保持预处理阶段的计算易于处理,每个样本由ns位组成。样本应该就是一个时间序列数据文件有多少行,就是多少个样本,不超过106行;

  第一个关键参数是要连接以形成每个数据块的样本数,用c表示。要连接的最佳样本数量将取决于相邻样本之间有多少相关性;与没有连接的相比,每个样本的基使用的比特更少,从而减少了表示相关的开销。另一方面,连接过多的样本会降低匹配基的概率,因为它们需要在更多的位中相等,因此很可能总体上的匹配会更少。

  此外,当每个块是由更多数量的样本形成时,固定数量的样本将导致更小数量的块;块就是固定的将多少个样本的块连接在一起,然后对块应用转换函数得到基和偏差,如果多个块的基一样,就删除重复的基,只保留偏差;

  因此,要连接的正确样本数量显然依赖于数据集,应该从中推断出来。为了推断这个参数c应该是什么,作者提出了算法1中的启发式算法。这个过程是一个迭代的,其中越来越多的样本被连接起来,直到几乎所有的块都是唯一的;允许有一小部分的重复块,d=0.01;当c确定下来后,每个块的长度就是n=cns位;
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_随机访问_05
  接下来,必须确定用于偏差的位数,即变换函数φk的k值,k是基的大小,偏差就是n-k。为了最大化匹配的基的位数,作者希望偏差包含与块的其余部分最不相关的位 ,基的位数越大,偏差的位数就越小,因为二者之和为n;作者可以通过估计位集之间的相互信息来捕获这一点,使用训练数据来找到位对之间的皮尔逊相关性(只捕获了线性的相关性),在估计了相关矩阵后,块的位根据最大绝对相关性按降序排序;

  训练集的存储消耗如下:k是基的大小,K是不相同的基的个数,N是块的个数;
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_数据压缩_06
对于所有块:
第一步:把整个块都当做基,这样n=k;通过计算唯一基的数量来评估Sn
第二步:删除了相关性最小的位,这样基的长度为n-1;重新计算唯一基的数量以及存储开销Sn-1
第三步:重复第二步直到 Sn-i-1>=Sn-i,说明此时为最低消耗,基的长度为k=n-i,偏差长度为n-k=i;
第四步:最后,把之前删除的i个最不相关的位的索引,形成集合 I={i1,i2,i3…in-k};他指定要是用哪些位作为偏差,其实就是集合 I 所对应的位作为偏差;(这么理解,比如块1和块2对应0号基,那么说明块1和块2里面都有相同的 k 位,剩下不同的n-k位作为偏差存放在基旁边 => 0号基+偏差1+0号基+偏差2,因为每个块的I是相同的,所以根据集合I就可以拔最后n-k再插入回去,恢复)

论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_数据_07
  如果发生事件Sn<Sn−1,广义重复数据消除方法将作为经典重复数据消除的特殊情况。即回到经典的重复数据删除,并使用n=k,即c=1,n−k=0,把整个块都当做基;


疑惑:怎么找到块里面的位对之间的相关性?明明块里面就一个序列,对单独一个二进制序列做相关性检验明显不可能
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_时间序列_08
原文所说:相反,作者使用训练数据来找到位对之间的皮尔逊相关性。虽然这只捕获了线性的和成对的相关性,它捕获的信息与文献[25]是基本相同的。在估计了相关矩阵后,块的位根据最大绝对相关性按降序排序???


2 基的使用统计估计(可选)

  此步骤涉及到浏览所有文件,以计算每个基被使用的次数。这使得作者可以通过计算每个基的频率来估计基的分布;这也可以用于定义基ID的熵编码方案,即对常用基进行较少位的编码,Huffman的思想,这可以进一步提高整体压缩能力,因为基ID所需的存储空间更少。

  但是,它将影响整体压缩速度,并影响随机访问性能,因此只有当整体压缩速率比随机访问性能更重要时才应该使用此步骤。一般来说,如果基的使用分布远非均匀,这一步骤最能提高压缩效果,因为大量使用的基将得到一个短ID,而很少的碱基将得到一个长ID。如果分布均匀,则难以获得增益。为了解码,还需要存储为每个基对应的码字,使霍夫曼表以类似于在解冻算法[27]中所做的方式紧凑地存储;

3 文件压缩

  最后一步是实际执行文件的压缩,这些文件被逐个压缩,该过程在算法2中有详细说明。每个文件都以流的方式进行处理,从开始到结束,一次处理一个块。如果文件不能分割为整数块,则使用零填充形成最后一个块。对于每个块,首先识别基和偏差,然后找到该特定基的ID。如果该基还不存在,则首先将其添加到基字典D中,并分配下一个可用的整数,从0开始,它将作为其ID。因此,第一个基得到整数0,第二个基得到1,以此类推。一旦确定了ID并更新了字典,就将处理下一个块。在原始文件中的所有块都被处理之后,作者确定需要多少位来表示基id。基本id可以用⌈log2Ki⌉位表示;
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_重复数据_09
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_随机访问_10
  K(i)是将文件 i 的基添加到字典后的基数。最后,生成压缩后的输出。它首先有一个编码 l(i) 的编码,这将需要解码。然后它遵循一个交替的结构,每个块匹配rj(i)位的基ID以及旁边还有;

  此外,还必须存储字典D,它的存储方式使得文件的前k位包含ID为0的基,下面的k位包含ID为1的基 => Base dictionary,以此类推。因此,存储在系统中的数据的压缩结构如图3所示;
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_时间序列_11

  • Ni表示第i个文件的样本数
  • Ki表示第i个文件基的个数;
  • l(i)表示第i个文件基的ID的位数,采用Elias-gamma编码,占用γ(l(i))位;
  • yj(i)表示第i个文件第j个块的n-k 位的偏差 ;
  • rj(i)表示第i个文件第j个块所匹配的基的ID;

  要以在线方式使用该方案,可以在接收数据时动态存储字典。有两种简单的方法来实现这一点,一是定期将流分解为文件,并单独处理;另一种方法是将ID的长度设置为全局参数,以便在识别ID时立即保存;

5.3 解压缩

首先,恢复压缩的状态。然后,解码文件;

1 恢复压缩状态

加载预处理阶段存储的参数ns、c存储和 I。块长度n必须是c*ns位;作者也可以立即推断出n−k=|I|,这意味着k=n−|I|。作为最后一步,作者准备好了字典D,因为基的组织是已知的,字典文件中的第j个k位块对应于ID为j−1的基。字典要么全部加载到内存中,或者所需的基在需要时从字典中检索;

2 解压缩文件

  文件将被逐个解压缩。所有文件都以用于表示基ID的位数的编码 l(i) 开始。虽然这个编码有可变的长度,但它很容易通过首先计算连续零的数量m来解码。下面的m+1位是l(i)的二进制编码。一旦知道该值,解码器就知道压缩序列所包含基的l(i)位ID对和(n−k)位偏差。这就能够完美地重建原始文件。该过程详细说明了算法3;
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_时间序列_12

5.4 随机访问

  广义重复数据删除压缩方案允许低成本的随机访问数据,在本节中,作者将详细介绍访问数据的任意位置的过程及其成本。首先,必须在访问数据的第一部分中部分恢复压缩机状态,也就是说,在预处理阶段存储的参数ns、c和I将被加载。n和k是由这些方法计算出来的,因为它们对理解压缩表示是至关重要的。

  本节中所述的成本大多假设为最坏情况,即只对数据进行一次访问,后续访问的开销显然会更小,因为可以重用来自以前的访问的状态,状态只需恢复一次;

1 访问块

  给出访问任何特定块的过程,假设所需的块是zj(i),即文件F(i)的第j个块;第一步是加载l(i),即用于表示压缩文件FC(i)中基的ID的位数。该值的 Elias-gamma 编码位于FC(i)的开头,并占用γ(l(i))位,必须访问所有这些位才能解码该值,是有分隔符的,便于得到l(i)。然后,每个块都有一个使用精确的 l(i)+(n−k) 位的压缩表示,并且块以与原始文件相同的顺序出现。因此,块j的比特从这开始:
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_时间序列_13
在这里结束:
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_重复数据_14
因此总共需要访问:
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_随机访问_15

2 访问单个位

  压缩格式还允许更细粒度的随机访问模式。可以从原始数据中访问任何特定的位。此访问的成本取决于该位是编码为块的基数还是偏差的一部分。现在将评估这两种情况:

  假设作者想知道第i个原始文件F(i)中的位a的值。与访问整个块一样,必须首先加载l(i),即压缩文件FC(i)中用于表示基id的位数。这仍然需要访问γ(l(i))位,即该值的Elias-gamma编码。文件中每个块的压缩大小:l(i)+(n−k)位现在已知。在原始文件中,位a属于⌊a/n⌋ 个块z⌊a/n⌋(i),它必须位于压缩文件中,与前一节中发现的位置相同,从α(⌊a/n⌋)开始到 β(⌊a/n⌋)结束;

  不像前一节那样加载整个块,而是确定位a在这个块中的位置。在原始的块中,位a一定处于a mod n 这个块中;下一步取决于该位是作为压缩中偏差的一部分还是基的一部分;

  处于偏差中:如果 a mod n ∈ I,即该位存储在偏差中;I中元素的顺序揭示了位a的位置,如果a mod n是I中的第j个元素,同样该位同样可以作为压缩块中偏差的第j个元素找到;即位a的位置为α(⌊a/n⌋)+l(i)+j,能够立即索引;
在最坏的情况下,检索位必须访问的位总数为:
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_重复数据_16
  处于基中:要确定比特的值,第一步是访问块开头的l(i)位,以查找ID的值 r⌊a/n⌋(i);ID显示哪个基与该特定的块相关联,那么该基的位应该在此区间中:[kr⌊a/n⌋(i),kr⌊a/n⌋(i)+k-1];为了找到确切的位置,作者还不能直接访问一个特定的位,因为原始块中的一些位被移动到了最后。为了最终找到感兴趣的位置,作者确定有多少位置由于排列而移动,作者用一个指示器来判断:论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_随机访问_17
  1{·}表示指示器函数,如果语句为true,则取1,否则则取0;总共,检索位必须访问的位数为:
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_随机访问_18
  与访问位于偏差中的位相比,还有一个额外的l(i)位;

六、实验

6.1 base method

  • GZIP
  • BZIP2
  • 7-zip

6.2 评估指标

将以下两点作为压缩质量进行对比:

  • 压缩率CR:压缩后尺寸/压缩前
  • 随机访问成本:

并没有将压缩速率作为指标;

6.3 数据集

来自不同领域的8个时间序列数据集;
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_时间序列_19

6.4 实验结果

1 压缩率比较

论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_数据_20
  对于前6个数据集,作者的方法比GZIP的压缩比更小,但未达到Bzip2和7z;对于最后两个数据集,参数启发式式回到经典的重复数据删除,没有连接。这是作者的压缩方法在这些信号上的最佳配置,但通用方法都实现了更好的压缩;

2 启发式算法最优性验证

论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_重复数据_21
  灰色的线分别代表c=1、c=2……c=8,启发式方法选择的方法是c=5,n−k=17,如红星所示。可以看出,所选的配置非常接近全局最小值,验证了启发式方法是合理的。其他数据集的性能相似,所实现的压缩接近全局最小值。

3 随机存取成本

  作者的方法一个明显的优点是,它使随机访问数据的成本比对于通用的压缩方案更低。为了减少通用压缩机的随机访问成本,一种方法是分割文件,然后对这些较小部分分别执行压缩,以压缩性能换取随机访问成本,因为这允许通过解压缩一个部分而不是整个文件来访问。对于一般用途的方法,这就是作者如何提供更低的随机访问成本。
论文阅读:A Randomly Accessible Lossless Compression Scheme for Time-Series Data_随机访问_22
  在作者的方案中,随机访问如第v节所述。压缩比和检索单个位所必须访问的位数之间的权衡如图6所示,其为麦克风数据集。图中显示了在最坏情况下(必须恢复参数)和已知参数的情况下检索单个基位的成本;

  这个图不能看点,要看趋势,比如对于通用方法,压缩比越低,最后文件数据越少,其检索单个位所必须访问的位数必然会增加;而对于本文中的方法,压缩比一直降到接近0.4,它检索单个位所必须访问的位数都很小,与同样0.4压缩比的通用方法差了将近三个数量级;

  对于此特定数据集的启发式选择的参数,如果事先没有恢复压缩机的状态,那么需要最多访问数百位才能检索未压缩数据的任何单个位。而如果压缩机状态已经恢复,则如果是基位,可以通过访问31比特来访问任何单个比特,如果是偏差位则可以通过访问10位来检索;

总结:

  • 与BZIP2和7z相比,作者的方案随机访问任意位所需成本至少少了两个数量级,同时具有相似的压缩比;
  • 作者的方案在压缩比和随机访问能力方面都优于GZIP;
  • 如果有严格的随机访问要求,作者的方案可以非常有效地压缩数据。对于其他数据集的压缩比和随机访问之间的权衡是相似的,而且作者的方法通常能够以更小的成本允许随机访问;随机访问方面,能够与作者的方法可比的唯一另一种方法就是不压缩存储,这需要更多的存储空间;
价值文献

这是通用压缩方法的随机访问:
[5] K. Tatwawadi, S. S. Bidokhti and T. Weissman, “On Universal Compression with Constant Random Access,” 2018 IEEE International Symposium on Information Theory (ISIT), 2018, pp. 891-895, doi: 10.1109/ISIT.2018.8437931.

验证了这种可随机访问的方案的可行性:
[6] V. Chandar, D. Shah, and G. W. Wornell, “A locally encodable and decodable compressed data structure,” in Annual Allerton Conf. on Communication, Control, and Computing, 2009, pp. 613–619.

对基的序号进行编码的压缩方案
[28] P. Elias, “Universal codeword sets and representations of the integers,” IEEE Trans. Inf. Theory, vol. 21, no. 2, pp. 194–203, mar 1975.

重复数据消除综述
[7] W. Xia, H. Jiang, D. Feng et al., “A Comprehensive Study of the Past,Present, and Future of Data Deduplication,” Proc. IEEE, vol. 104, no. 9, pp. 1681–1710, 2016.

广义重复消除
[9] R. Vestergaard, Q. Zhang, and D. E. Lucani, “Generalized Deduplication: Bounds, Convergence, and Asymptotic Properties,” in IEEE GLOBECOM, dec 2019.

Vestergaard, Rasmus & Zhang, Qi & Lucani, Daniel. (2019). Lossless Compression of Time Series Data with Generalized Deduplication. 1-6. 10.1109/GLOBECOM38437.2019.9013957.

BZIP2
网址:sourceware.org/bzip2/

Gzip
P. Deutsch, “GZIP File Format Specification Version 4.3,” United States,1996.

7-zip
I. Pavlov, “7-zip.” [Online]. Available: 7-zip.org