CN109255090B - 一种web图的索引数据压缩方法 - Google Patents
一种web图的索引数据压缩方法 Download PDFInfo
- Publication number
- CN109255090B CN109255090B CN201810921025.3A CN201810921025A CN109255090B CN 109255090 B CN109255090 B CN 109255090B CN 201810921025 A CN201810921025 A CN 201810921025A CN 109255090 B CN109255090 B CN 109255090B
- Authority
- CN
- China
- Prior art keywords
- index data
- array
- displacement
- degree
- index
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种web图的索引数据压缩方法,通过索引数据分块,将索引数据(度数和位移)分成包含数百到数千个节点的块之后,则大部分块中只包含低度数节点,此时这些块中的度数和位移差值通常都可以用一到两个字节存放,也就可以达到50%以上的索引数据压缩率(由之前的4个字节压缩到一到两个字节)提高了可压缩性;通过度数和位移的码字交叉存放,这种交叉存放使得同一个节点的度数和位移的码字以很高的概率位于在同一个高速缓存行里面,因此可以大大提高高速缓存命中率;通过定长编码实现真正的随机访问,定长编码使得节点的压缩后的索引数据的下标可以通过计算得出,并根据下标进行真正的随机访问,提高了解压速度。
Description
技术领域
本发明属于大数据处理领域,更具体地,涉及一种web图的索引数据压缩方法。
背景技术
web图是由web页面及它们之间的超链接组成的大规模图,它描述了万维网网页之间的链接关系,其具有如下几个特点:首先,web图的规模很大。万维网上每个可以抓取到的网页都可能是web图中的一个节点,而每个网页上的每个超链接都可能是web图中的一条边。由此可以想象web图的规模非常大;其次,web图很稀疏,也就是web图中的节点的平均度数比较低;最后,web图的度数呈幂律分布。一方面,单机内存空间有限,而且web图的规模增长很快,这限制了单机内存web图处理的使用范围;另一方面,CPU的处理速度大大超过内存提供数据的速度,利用CPU富余的计算能力来缓解内存带宽问题就是个合理的选择,这一点应用于web图处理,就是选用轻量级的压缩算法对web图进行压缩后再进行内存处理。
目前尚未发现针对内存web图处理场景下的索引压缩方法。因为web图通常很稀疏,所以web图处理中的索引的比例往往相当大。对于比较稀疏的web图,索引的比例可能高达80%以上。所以迫切需要在并行内存web图处理场景下对索引数据的压缩技术。
发明内容
针对现有技术的缺陷,本发明的目的在于解决现有技术中压缩web图中索引比例较大导致的并行内存web图处理场景下内存占用过大的技术问题。
为实现上述目的,一方面,本发明提供了一种web图的索引数据压缩方法,该方法包括以下步骤:
S1.将邻接列表数组压缩后的web图的待压缩的索引数据划分为等长索引数据块;
S2.对于当前索引数据块,将压缩索引数组的当前下标放入块索引数组中起始下标域内,将第一个初始位移的码字放入块索引的参考位移域内;
S3.对于当前索引数据块,基于当前索引数据块的初始度数最大值确定当前索引数据块度数的码字长度;
S4.将当前索引数据块度数的码字长度放入块索引的度数码字长度域内,将第一个初始度数的码字存入压缩索引数组中;
S5.对于当前索引数据块,计算剩余的初始位移和参考位移的差值,基于位移差值最大值确定当前索引数据块的位移差值的码字长度;
S6.将当前索引数据块的位移差值的码字长度放入块索引的位移差值码字长度域内,将当前索引数据块剩下的度数码字和位移差值码字交叉放入压缩索引数组中;
S7.重复步骤S2-S6,直至所有的索引数据块都被压缩。
具体地,邻接列表数组采用变长编码进行压缩。
可选地,变长编码为vByte。
具体地,索引数据包含位移数组和度数数组。
具体地,把索引数据分成包含数百到数千个节点的块。
具体地,索引数据块的元数据被存放于块索引,块索引被实现为一个记录数组,其中每个记录包含四个域,四个域分别存放参考位移、起始下标、位移差值码字的长度、度数码字的长度
为实现上述目的,另一方面,本发明提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法所述的web图的索引数据压缩方法。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:
(1)本发明通过索引数据分块,将索引数据(度数和位移)分成包含数百到数千个节点的块之后,则大部分块中只包含低度数节点,此时这些块中的度数和位移差值通常都可以用一到两个字节存放,也就可以达到50%以上的索引数据压缩率(由之前的4个字节压缩到一到两个字节)提高了可压缩性。
(2)本发明通过度数和位移的码字交叉存放,这种交叉存放使得同一个节点的度数和位移的码字以很高的概率位于在同一个高速缓存行(cache line)里面,因此可以大大提高高速缓存命中率(cache hit rate)。
(3)本发明通过定长编码实现真正的随机访问,定长编码使得节点的压缩后的索引数据的下标可以通过计算得出,并根据下标进行真正的随机访问,提高了解压速度。
附图说明
图1为现有技术中CSR(Compressed Sparse Row)结构示意图;
图2为现有技术中vByte压缩方法示意图;
图3为本发明提供的一种web图的索引数据压缩方法流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
web图(webgraph)是由web页面及它们之间的超链接组成的大规模图,它描述了万维网(World Wide Web)网页之间的链接关系。web图有很多现实应用,举例如下:搜索引擎都是利用web图来计算各个网页的PageRank值,进而根据PageRank值的大小来确定为用户显示相关搜索结果时不同网页的先后次序;在网页内容分析中,web图被用来检测相似的话题;在HITS算法(也是搜索引擎中使用的一种网页价值评估算法)中寻找关键点网页(hub)和权威网页(authority),等等。
图1为现有技术中CSR(Compressed Sparse Row)结构示意图。如图1所示,CSR是一种广泛使用的web图的存储格式。对于一个无向web图,实际处理时每个无向边被当成两个方向相反的有向边来处理。CSR由两个数组组成,分别是位移数组和邻接列表(adjacencylist)数组。邻接列表数组存放所有顶点的出边,而位移数组存放每个顶点的邻接列表的起始下标。因为无向web图中每个顶点的入边和出边完全一样,所以在CSR中就可以利用这种对称性而只存放出边。如果使用的是有向图,此时不具有对称性,所以还需要另外一个CSR结构存放所有顶点的入边。在对图进行压缩时,首先任选一种压缩方法压缩邻接列表数组(非索引数据),优选vByte压缩方法。因为使用的是变长编码,所以压缩后web图的位移不再包含度数信息,因此需要另外增加一个度数数组来存放每个节点的度数。索引数据就是指位移数组和度数数组,索引压缩就是对它们进行压缩。
图2为现有技术中vByte压缩方法示意图。如图2所示,它分两个种情况:标准vByte和有符号vByte。前者只能压缩非负整数,后者则还可以压缩负数。vByte是一种变长的字节编码的整型数压缩方法(每个码字的字节数,也就是长度不一定相同),总是尽量把整型数开头的0比特删除而节省空间。为了压缩非负数,标准vByte编码尽可能多的移除其二进制编码的前导0比特。标准vByte编码的一个码字包含若干个对齐到物理字节的字节。对齐到物理字节可以大大提高访问速度。在每一个字节中,最高位(阴影方框所示)用来表示下一个字节是否还属于当前码字。1表示属于,0表示不属于。但是在压缩web图时,被压缩的整数可能是负数。所以标准vByte就被修改成了有符号vByte。具体是用码字的最低字节的次高位(左边第二位,图中原码的左边第一位)表示整数的符号。0表示正,1表示负。其它和标准vByte相同。在我们的压缩方案中,vByte被用来压缩邻接列表数组。
邻接列表数组用vByte压缩后,CSR结构中就必须引入另外一个数组,也就是度数数组来存放各个节点的度数。因为在非压缩图的CSR结构中,节点度数可以通过相邻两个节点的位移来计算得出,所以不需要单独的度数数组来存放各节点的度数。而在压缩web图的CSR结构中,由于邻接列表数组被用变长的vByte编码压缩了,所以节点度数不能通过位移计算得出了,因此必须引入度数数组存放各节点度数。
图3为本发明提供的一种web图的索引数据压缩方法流程图。如图3所示,该方法包括以下步骤:
S1.将邻接列表数组压缩后的web图的待压缩的索引数据划分为等长索引数据块;
S2.对于当前索引数据块,将压缩索引数组的当前下标放入块索引数组中起始下标域内,将第一个初始位移的码字放入块索引的参考位移域内;
S3.对于当前索引数据块,基于当前索引数据块的初始度数最大值确定当前索引数据块度数的码字长度;
S4.将当前索引数据块度数的码字长度放入块索引的度数码字长度域内,将第一个初始度数的码字存入压缩索引数组中;
S5.对于当前索引数据块,计算剩余的初始位移和参考位移的差值,基于位移差值最大值确定当前索引数据块的位移差值的码字长度;
S6.将当前索引数据块的位移差值的码字长度放入块索引的位移差值码字长度域内,将当前索引数据块剩下的度数码字和位移差值码字交叉放入压缩索引数组中;
S7.重复步骤S2-S6,直至所有的索引数据块都被压缩。
步骤S1.将邻接列表数组压缩后的web图的待压缩的索引数据划分为等长索引数据块。
在索引压缩前,首先用vByte压缩邻接列表数组,并把压缩后的邻接列表数组存放在压缩邻接列表数组中。尚未压缩的索引数据(度数和位移)被存放在两个整型数组中。与参考位移的差值在每个索引数据块的压缩之前计算出来。压缩索引和压缩邻接列表被分别存放在一个字节数组中。
考虑到web图的稀疏特性和幂律特性。如果把索引结构(包括位移数组和度数数组)分成包含数百连续节点的块,则大部分图中只包含小节点,所以这些块中的最大度数不超过数百。如图3所示,以图中长度为8的一个索引数据块的压缩为例说明其工作流程。如果我们选择这些块中的第一个位移作为参考位移,并计算块中其他位移和参考位移的差值(delta),则这些差值绝大部分不超过数万。因此大部分块中的度数和位移差值都可以用一到两个字节存放。也就是,大部分块中的度数和位移差值都可以用一到两个字节长度的定长码字来编码。
步骤S2.对于当前索引数据块,将压缩索引数组的当前下标放入块索引数组中起始下标域内,将第一个初始位移的码字放入块索引的参考位移域内。
当前块的压缩后的数据在压缩索引数组中的起始下标,是指压缩索引数组中第一个尚未存入数据的空闲单元的下标,将该下标作为起始下标保存到块索引数组起始下标域内,之后才存入第一个初始度数的码字,与此同时下标+1以指向下一个(空闲)单元。
步骤S3.对于当前索引数据块,基于当前索引数据块的初始度数最大值确定当前索引数据块度数的码字长度。
扫描初始度数,找出其中的最大值。这个最大值决定了当前块中的每一个度数的码字长度。对于本实施例,最大度数是34,所以一个字节就可以放下。因此当前块中的每一个度数都用一个字节存放。
步骤S4.将当前索引数据块度数的码字长度放入块索引的度数码字长度域内,将第一个初始度数的码字存入压缩索引数组中。
对于本实施例,将度数码字的长度(1)放入块索引数组的当前元素的度数码字长度域内,并且把第一个度数(13)的码字(存放在一个字节内)存入压缩索引数组中。
步骤S5.对于当前索引数据块,计算剩余的初始位移和参考位移的差值,基于位移差值最大值确定当前索引数据块的位移差值的码字长度。
扫描剩余的初始位移并计算它们到参考位移的差值,并把这些差值放入另一个整型数组“和参考位移的差值”数组中。位移差值的最后一个也就是最大值。它决定了每一个位移差值的码字长度。对于本实施例,最大值是201,可以用一个字节存放。所以每一个差值都用一个字节存放。
步骤S6.将当前索引数据块的位移差值的码字长度放入块索引的位移差值码字长度域内,将当前索引数据块剩下的度数码字和位移差值码字交叉放入压缩索引数组中。
位移差值的码字长度(1)被存放在块索引数组的位移差值码字长度域中。然后剩下的度数码字和位移差值码字被交叉放入压缩索引数组中。对于本实施例,第一个参考位移差值29紧跟在第一个度数(13)的码字之后,第二个度数(34)的码字紧跟在第一个参考位移差值29之后,依次交叉放入压缩索引数组中。
步骤S7.重复步骤S2-S6,直至所有的索引数据块都被压缩。
索引块的元数据被存放于一个高层的索引结构——块索引。块索引被实现为一个记录数组,其中每个记录包含四个域,而不是四类数据分别存放在四个独立的数组中以提高缓存命中率。四个域分别存放参考位移(也就是块中第一个位移)、当前块的压缩后的数据在压缩索引数组中的起始下标、单个位移差值码字的长度(字节数)、单个度数码字的长度(字节数)。
解压过程
当处理压缩web图时,所有的解压工作都是在线按需完成的。当一个节点的邻接列表需要被解压时,首先基于压缩索引数组解压该节点的初始度数和位移。原始度数和位移解压完成后,它们被传递给vByte的解压程序,并有vByte的解压程序解压邻接列表。然后把解压的邻接列表交给算法使用。
以上,仅为本申请较佳的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。
Claims (4)
1.一种web图的索引数据压缩方法,其特征在于,索引数据包含初始位移和初始度数,分别存放在初始位移数组和初始度数数组,该方法包括以下步骤:
S1.压缩索引数组,用于存放压缩后的索引数据,将邻接列表数组压缩后的web图的待压缩的索引数据划分为包含数百到数千个节点的等长的索引数据块,索引数据块的元数据被存放于块索引数组,每个块索引数组包含参考位移域、起始下标域、位移差值码字长度域、度数码字长度域,分别用于存放参考位移、当前索引数据块的压缩后的数据在压缩索引数组中的起始下标、位移差值码字的长度、度数码字的长度;
S2.对于当前索引数据块,将压缩索引数组的当前第一个尚未存入数据的空闲单元的下标放入块索引数组中起始下标域内,将当前索引数据块内第一个初始位移的码字放入块索引数组的参考位移域内;
S3.对于当前索引数据块,基于当前索引数据块内的初始度数码字最大值确定当前索引数据块度数码字的长度;
S4.将当前索引数据块度数码字的长度放入块索引数组的度数码字长度域内,将当前索引数据块内第一个初始度数的码字存入压缩索引数组中;
S5.对于当前索引数据块,计算当前索引数据块内每个剩余的初始位移码字和参考位移码字之间的位移差值码字,基于位移差值码字最大值确定当前索引数据块的位移差值码字的长度;
S6.将当前索引数据块的位移差值码字的长度放入块索引数组的位移差值码字长度域内,将当前索引数据块内剩下的初始度数码字和位移差值码字交叉放入压缩索引数组中;
S7.重复步骤S2-S6,直至所有的索引数据块都被压缩。
2.如权利要求1所述的索引数据压缩方法,其特征在于,邻接列表数组采用变长编码进行压缩。
3.如权利要求2所述的索引数据压缩方法,其特征在于,变长编码为vByte。
4.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至3任一项所述的web图的索引数据压缩方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810921025.3A CN109255090B (zh) | 2018-08-14 | 2018-08-14 | 一种web图的索引数据压缩方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810921025.3A CN109255090B (zh) | 2018-08-14 | 2018-08-14 | 一种web图的索引数据压缩方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109255090A CN109255090A (zh) | 2019-01-22 |
CN109255090B true CN109255090B (zh) | 2021-08-03 |
Family
ID=65050140
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810921025.3A Active CN109255090B (zh) | 2018-08-14 | 2018-08-14 | 一种web图的索引数据压缩方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109255090B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110175269B (zh) * | 2019-05-31 | 2021-03-12 | 西安芯瞳半导体技术有限公司 | 一种顶点索引的压缩及解压缩方法、装置及计算机存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103997651A (zh) * | 2014-05-17 | 2014-08-20 | 北京中和卓远科技有限公司 | 一种合成图像的数据压缩方法及装置 |
CN104156407A (zh) * | 2014-07-29 | 2014-11-19 | 华为技术有限公司 | 索引数据的存储方法、装置及存储设备 |
CN104199892A (zh) * | 2014-08-26 | 2014-12-10 | 上海爱数软件有限公司 | 一种基于压缩合并异步更新的索引读写方法 |
CN104636349A (zh) * | 2013-11-07 | 2015-05-20 | 阿里巴巴集团控股有限公司 | 一种索引数据压缩以及索引数据搜索的方法和设备 |
CN105743509A (zh) * | 2016-01-26 | 2016-07-06 | 华为技术有限公司 | 数据压缩装置及方法 |
CN107852174A (zh) * | 2015-07-03 | 2018-03-27 | 基麦提松科技公司 | 固定长度数据的压缩方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5664980B2 (ja) * | 2012-06-19 | 2015-02-04 | コニカミノルタ株式会社 | 画像処理装置及び画像圧縮方法 |
-
2018
- 2018-08-14 CN CN201810921025.3A patent/CN109255090B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104636349A (zh) * | 2013-11-07 | 2015-05-20 | 阿里巴巴集团控股有限公司 | 一种索引数据压缩以及索引数据搜索的方法和设备 |
CN103997651A (zh) * | 2014-05-17 | 2014-08-20 | 北京中和卓远科技有限公司 | 一种合成图像的数据压缩方法及装置 |
CN104156407A (zh) * | 2014-07-29 | 2014-11-19 | 华为技术有限公司 | 索引数据的存储方法、装置及存储设备 |
CN104199892A (zh) * | 2014-08-26 | 2014-12-10 | 上海爱数软件有限公司 | 一种基于压缩合并异步更新的索引读写方法 |
CN107852174A (zh) * | 2015-07-03 | 2018-03-27 | 基麦提松科技公司 | 固定长度数据的压缩方法 |
CN105743509A (zh) * | 2016-01-26 | 2016-07-06 | 华为技术有限公司 | 数据压缩装置及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109255090A (zh) | 2019-01-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103177111B (zh) | 重复数据删除系统及其删除方法 | |
US5049881A (en) | Apparatus and method for very high data rate-compression incorporating lossless data compression and expansion utilizing a hashing technique | |
US5153591A (en) | Method and apparatus for encoding, decoding and transmitting data in compressed form | |
CN112953550B (zh) | 数据压缩的方法、电子设备及存储介质 | |
KR101049699B1 (ko) | 데이터의 압축방법 | |
Grossi et al. | The wavelet trie: maintaining an indexed sequence of strings in compressed space | |
WO2019076177A1 (zh) | 基因测序数据压缩预处理、压缩、解压方法、系统及计算机可读介质 | |
CN112380196B (zh) | 一种用于数据压缩传输的服务器 | |
CN116594572B (zh) | 浮点数流式数据压缩方法、装置、计算机设备及介质 | |
CN113312325B (zh) | 轨迹数据传输方法、装置、设备及存储介质 | |
CN104410424A (zh) | 嵌入式设备内存数据的快速无损压缩方法 | |
CN109255090B (zh) | 一种web图的索引数据压缩方法 | |
JPH05241777A (ja) | データ圧縮方式 | |
Fusco et al. | RasterZip: Compressing network monitoring data with support for partial decompression | |
CN113078908B (zh) | 一种适用于时间序列数据库的简易编解码方法 | |
CN114268323A (zh) | 支持行存的数据压缩编码方法、装置及时序数据库 | |
Chen et al. | Using difficulty of prediction to decrease computation: Fast sort, priority queue and convex hull on entropy bounded inputs | |
CN116707532A (zh) | 一种压缩文本的解压方法、装置、存储介质及电子设备 | |
CN115603758A (zh) | 一种客户号压缩和解压方法及装置 | |
Cheng et al. | The Key as Dictionary Compression Method of Inverted Index Table under the Hbase Database. | |
Hreinsson et al. | Storing a compressed function with constant time access | |
US20240256513A1 (en) | Compact Probabilistic Data Structure For Storing Streamed Log Lines | |
Al-Bahadili et al. | A bit-level text compression scheme based on the HCDC algorithm | |
Goyal | Coding methods for text string search on compressed databases | |
Höglund | Lightweight Real-Time Lossless Software Compression of Trace Data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |