CN113992208B - 一种优化流数据处理性能的半解压数据压缩方法 - Google Patents

一种优化流数据处理性能的半解压数据压缩方法 Download PDF

Info

Publication number
CN113992208B
CN113992208B CN202111383322.5A CN202111383322A CN113992208B CN 113992208 B CN113992208 B CN 113992208B CN 202111383322 A CN202111383322 A CN 202111383322A CN 113992208 B CN113992208 B CN 113992208B
Authority
CN
China
Prior art keywords
data
node
task
computing node
computing
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
Application number
CN202111383322.5A
Other languages
English (en)
Other versions
CN113992208A (zh
Inventor
宋杰
杨谦
Original Assignee
东北大学
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by 东北大学 filed Critical 东北大学
Priority to CN202111383322.5A priority Critical patent/CN113992208B/zh
Publication of CN113992208A publication Critical patent/CN113992208A/zh
Application granted granted Critical
Publication of CN113992208B publication Critical patent/CN113992208B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

本发明提供一种优化流数据处理性能的半解压数据压缩方法,涉及流数据处理技术领域。该方法首先将流数据处理任务抽象为基于有向无环图的数据流动图;并将数据流动图用邻接表和逆邻接表的形式保存;再基于数据流动图对应的邻接表和逆邻接表,判断流数据处理任务的节点类型,初始节点将接收到的数据压缩后发送给中间计算节点;中间计算节点将接收到的数据部分解压用于计算,并将计算结果再次压缩后发送到后续节点;结束节点将接收到的数据部分解压后用于计算,完成计算任务。该方法不仅可以通过压缩减少传输数据量,从而减少网络传输耗时,同时通过半解压的方法减少部分解压耗时和计算耗时,从而提高流数据处理的性能。

Description

一种优化流数据处理性能的半解压数据压缩方法
技术领域
本发明涉及流数据处理技术领域,尤其涉及一种优化流数据处理性能的半解压数据压缩方法。
背景技术
人类社会正处于大数据时代,近年来全球数据总量快速增长。为了处理如此海量的数据,数据中心的规模越来越大,数量也越来越多。如今世界上每天产生的数据内容多样,对传统的数据处理系统提出了很大的挑战。随着物联网、社交网络、金融分析等应用的普及,海量数据以较快的速度不断生成,形成了大规模数据流。这些应用需要对到达的流数据及时进行处理,以便从数据中提取有价值的信息。流数据处理系统通过大规模的并行计算,能够提供快速的数据处理,并对处理的实时数据流进行在线分析。流数据处理正成为从实时大数据中获取有用信息的最有效解决方案。由于这些原因,流数据处理性能问题得到了越来越多的关注,考虑分布式流数据处理系统的性能问题具有重要的现实意义。
流数据处理的性能关注的是处理数据的速度,即运行流数据处理任务需要花费的时间多少。针对流数据处理的不同步骤,有多个因素影响着流数据处理的性能,如数据从数据源的接收、数据在节点之间的传输和数据在计算节点上的处理等。也正因如此,流数据处理的性能可以从多个角度进行优化。
数据压缩是一种常见的优化手段,常用于数据存储和传输。网络传输是流数据处理流程中的一个重要环节,也是对流数据处理性能影响最大的环节,数据压缩可以显著地减少传输数据量,进而降低网络传输耗时,但同时会增加额外的压缩与解压耗时。
发明内容
本发明要解决的技术问题是针对上述现有技术的不足,提供一种优化流数据处理性能的半解压数据压缩方法,针对给定的流数据处理系统中运行的特定任务,通过使用此方法,实现该流数据处理的性能优化。
为解决上述技术问题,本发明所采取的技术方案是:一种优化流数据处理性能的半解压数据压缩方法,包括以下步骤:
步骤1:将流数据处理系统中的流数据处理任务抽象为图;对于给定的流数据处理系统中的特定任务,分析其在流数据处理系统中各个计算节点上的任务分配,建立该任务的数据流动模型并抽象为一个有向无环图,基于该数据流动模型分析每个计算节点上的数据流入和数据流出;具体方法为:
分析给定流数据处理任务,建立数据流动模型;所述数据流动模型使用基于有向无环图的数据流动图刻画出该流数据处理任务中计算节点之间的数据流动关系;在该数据流动模型下,流数据处理任务分配给若干个计算节点,计算节点之间存在数据流入或流出的关系;在该基于有向无环图的数据流动图中,包含对应计算节点的顶点和对应数据流动的有向边,具体为:①每个顶点对应流数据处理系统分配给该流数据处理任务的一个计算节点,每个计算节点进行一系列的数据处理任务;②两顶点之间的有向边表示一个计算节点完成系统分配给该节点的计算任务后将处理好的数据发送给下一个计算节点;③顶点的入度表示这个顶点对应的计算节点会从哪些计算节点接收数据,顶点的出度表示这个顶点对应的计算节点会将处理好的数据发送给哪些计算节点;④入度为0的顶点对应分配给该流数据处理任务的初始节点,也就是流数据处理系统从数据源接收流数据的节点;⑤出度为0的顶点对应分配给该流数据处理任务的结束节点,是将最后的处理结果输出或存储的节点;
步骤2:将基于有向无环图的数据流动图用邻接表和逆邻接表的形式保存,具体方法为:
步骤2.1:根据数据流动图建立能够存储该图的邻接表,用于计算图中各个顶点的出度;
首先给数据流动图中的各个顶点独自建立一个链表,用链表的头结点存储该顶点,用链表中其他结点存储以该顶点为弧尾(即流出节点)的邻接点;与此同时,将所有顶点对应的链表的头结点存储到一个数组中;各链表在存储各顶点对应的邻接点数据时,仅存储该邻接点位于数组中的位置下标;此外,存储各顶点的链表结点结构分为数据域和指针域两部分;数据域用于存储该顶点对应的计算节点执行任务需要的关键词,指针域用于链接下一个链表结点;
步骤2.2:根据数据流动图建立存储该图的逆邻接表,用于计算图中各个顶点的入度;
与步骤2.1中邻接表的建立方法类似,建立逆邻接表同样需要首先给数据流动图中的各个顶点独自建立一个链表,同样用链表的头结点存储该顶点,与邻接表不同,逆邻接表用链表中其他结点存储的是以该顶点为弧头(即流入节点)的邻接点;与此同时,将所有顶点对应的链表的头结点同样存储到一个数组中;各链表在存储各顶点对应的邻接点数据时,同样仅存储该邻接点位于数据中的位置下标;此外,存储各顶点的链表结点结构同样分为数据域和指针域两部分;数据域用于存储该顶点对应的计算节点执行任务需要的关键词,指针域用于链接下一个链表结点;
步骤3:针对流数据处理任务的初始节点,使用基于索引和前瞻性自适应哈夫曼编码的数据压缩方法将该节点接收到的数据压缩;初始节点从数据源接收初始数据,将数据发送到后续计算节点前,查看数据流动图对应的的邻接表获得后续计算节点的任务关键词,根据关键词建立索引后在即将发送给后续计算节点的数据上使用前瞻性自适应哈夫曼编码进行压缩;具体方法为:
步骤3.1:判断当前计算节点是否为初始节点,若是,则执行步骤3.2,否则执行步骤4;
读取步骤2建立好的邻接表和逆邻接表,分析当前计算节点在数据流动图中对应的顶点的入度和出度,若当前计算节点对应的顶点的入度为0,则判断当前计算节点为初始节点;
步骤3.2:使用基于索引和前瞻性自适应哈夫曼编码的数据压缩方法将初始节点接收到的数据压缩;
步骤3.2.1:初始节点在把收到的数据发送到后续计算节点之前,将每条数据表示为包含k种元素的k元组:
{e1,e2,e3,…,ek}
其中,ek表示该条数据中的第k个元素;
步骤3.2.2:读取建立好的邻接表,找到从该初始节点接收数据的计算节点的编号,并从存储该计算节点的链表数据域中获得该计算节点执行任务需要的关键词e;若关键词在该k元组中,当关键词个数为一时,设定此关键词在k元组中位于p位置,1≤p≤k,则将其移至k元组的最前方以便后续读取使用,此时该k元组转变成如下形式:
{ep,e1,e2,e3,…,ep-1,ep+1,…,ek}
当关键词个数大于一时,重复上述移动关键词的操作,或根据关键词的重要度找出最重要的一个关键词,从而只移动一次关键词,寻找最重要关键词的公式如下:
eprin=max(λ1e12e23e3,…,λkek)
其中,eprin为最重要的关键词,λ123,…,λk分别为各关键词的重要系数,它与关键词在总任务中的需求程度有关;
步骤3.2.3:将经过步骤3.2.2中移动关键词操作处理后的数据根据后续计算节点需要的关键词排序,同时依据此关键词建立索引表,表中的索引值为关键词的各个具体值,对应的地址为其在数据中的位置,即相对于首地址的偏移量;
步骤3.2.4:统计移动关键词操作处理后的数据中出现过的字符种类以及数据中关键词对应的出现次数大于设定阈值的字符串,将其作为编码表中的元素构建编码表,并根据这些元素构建前瞻性自适应哈夫曼编码树得到元素对应的编码;
在构建前瞻性自适应哈夫曼编码树时,看待编码表中的元素频率是从真实值不断递减至零的;构建前瞻性自适应哈夫曼编码树得到元素对应的编码的具体方法为:
步骤S1:对于给定的需要压缩的文本T,将其根据编码表中的元素拆分为T=x1…xs,xs为编码表中的某一个元素,首先计算出编码表中各个元素的出现频率,然后根据编码表中所有的元素及其各自对应的出现频率构建出一个标准的静态哈夫曼编码树;
步骤S2:对于文本x1…xs-1,按照文本内的顺序依次将对应的码字输出到编码文件中,然后修改哈夫曼树以对应后续文本内元素的出现频率;
步骤S3:对于文本xs,由于已经是最后的字符,因此只需要将它对应的码字输出到编码文件中,无需再修改哈夫曼树;
步骤3.2.5:最终的编码结果用编码表保存,之后根据此编码表将总数据压缩,压缩时根据编码表中每一种字符占据的比特位更新索引表中每条数据在压缩数据中的比特偏移量;最后将压缩好的数据与编码表和更新后的索引表共同发送到后续计算节点;此外,编码表和更新后的索引表也能够根据实际任务需求决定是否将其压缩后再传输;
步骤4:针对中间计算节点,使用半解压的数据压缩方法将接收到的数据解压和再次压缩;
中间计算节点接收来自先前计算节点的数据,若该数据为压缩数据,则根据此计算节点的实际任务需求,将其部分解压,之后将任务所需的解压后的数据送入CPU计算;计算完成后将计算结果发送给后续计算节点之前,同样针对性地对数据进行压缩;具体方法为:
步骤4.1:判断当前计算节点是否为中间节点,若是,则执行步骤4.2,否则执行步骤5;
读取建立好的邻接表和逆邻接表,分析当前计算节点在数据流动图中对应的顶点的入度和出度,若当前计算节点对应的顶点的入度与出度均不为0,则判断当前计算节点是中间计算节点;
步骤4.2:中间计算节点若接收到先前计算节点发送过来的压缩数据,则将其部分解压:首先分析当前的实际任务需求,若当前的实际任务只需要接收到的全部数据中的部分数据,则查看索引表,定位到该任务需求的数据所在的偏移量范围,对照编码表将这部分数据解压后直接送入CPU计算;
步骤4.3:中间计算节点完成该节点上的计算任务后,在将计算结果发送到后续计算节点之前,同样使用基于索引和前瞻性自适应哈夫曼编码的的数据压缩方法对即将发出的数据进行压缩;
步骤5:针对结束节点,将接收到的数据部分解压;
读取建立好的邻接表和逆邻接表后,若当前计算节点所对应的顶点出度为0,则判断当前节点为结束节点;
结束节点接收来自先前计算节点的数据,若该数据为压缩数据,则根据结束节点的实际任务需要,将其部分解压,之后将任务所需的数据送入CPU计算;
CPU计算完成后,将最终的计算结果输出或存储时根据实际需求针对性地选择是否将最终结果压缩;
步骤6:结合数据流动图,评估在该流数据处理任务上应用半解压的数据压缩方法的估算代价,估算代价公式如下:
其中,qtask表示在流数据处理任务上应用半解压数据压缩方法的估算代价,m和n分别表示数据流动图中顶点和边的个数,表示第i个顶点需要压缩的数据量,vc表示压缩速度,/>表示第i个顶点需要解压的数据量,vd表示解压速度,α表示压缩率,/>表示第j条边的传输数据量,/>表示第j条边的网络传输速率;
当qtask<0时,半解压的数据压缩方法适用于该流数据处理任务的性能优化。
采用上述技术方案所产生的有益效果在于:本发明提供的一种优化流数据处理性能的半解压数据压缩方法,在一个计算节点完成集群分配给该节点的计算任务后,将后续节点需要的数据发送出去前,会根据后续节点的任务所需的关键词构建一个索引,这样后续节点在接收到发送过来的压缩数据后,可以首先根据自己当前的任务需要查看该索引,定位所需数据所处的位置,对所需要的数据进行部分解压,从而减少解压数据量和处理数据量,提高数据处理的性能。
在对数据进行压缩前,需要构建前缀编码树。与常规的哈夫曼编码树的构建方式不同,本发明中构建的前瞻式自适应哈夫曼编码树首先会找出出现频率较高的关键词当作编码表中的元素与其他出现过的字符一同构建编码树以便节省总比特长度,同时结合了常用的自适应哈夫曼算法FGK算法和Vitter算法的优点,在设计上反转编码元素引用的方向,从而最终实现比静态哈夫曼编码更加节省空间的效果,因此提高了压缩效率。
本发明方法不仅可以通过压缩减少传输数据量,从而减少网络传输耗时,同时可以通过半解压的方法减少部分解压耗时和计算耗时,从而提高流数据处理的性能。
附图说明
图1为本发明实施例提供的流数据处理任务的任务示意图;
图2为本发明实施例提供的一种优化流数据处理性能的半解压数据压缩方法的流程图;
图3为本发明实施例提供的根据流数据处理任务生成的数据流动模型示意图,其中,(a)为基于有向无环图的数据流动图,(b)为该有向无环图对应的邻接表,(c)为该有向无环图对应的逆邻接表;
图4为本发明实施例提供的半解压示意图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
本实施例以如图1所示的某数据中心内的流数据处理系统中的流处理任务为例,使用本发明的优化流数据处理性能的半解压数据压缩方法对该流处理任务中的数据进行压缩解压。其中,初始节点接收来自网站的日志格式的源数据后将数据发送给计算节点1;计算节点1去除无效数据并对数据进行规范化处理后将数据发送到结束节点1和计算节点2;结束节点1将数据根据URL分类,对指定URL类别的数据根据用户去重得到整段时间内一类URL的独立访客数量并将其输出;计算节点2把数据按照指定的时间片长度切片并根据时间片的顺序将切割后的数据发送给结束节点2;结束节点2统计这一段时间片内的用户总数量和用户总访问时长,然后计算这个时间片内每个用户的平均访问时长并将其输出。在流处理任务上采用本发明的一种优化流数据处理性能的半解压数据压缩方法,可以实现对运行在流数据处理系统上的特定任务的性能优化。
本实施例中,一种优化流数据处理性能的半解压数据压缩方法,如图2所示,包括以下步骤:
步骤1:将流数据处理系统中的流数据处理任务抽象为图;对于给定的流数据处理系统中的特定任务,分析其在流数据处理系统中各个计算节点上的任务分配,建立该任务的数据流动模型并抽象为一个有向无环图,基于该数据流动模型分析每个计算节点上的数据流入和数据流出;具体方法为:
分析给定流数据处理任务,建立数据流动模型;所述数据流动模型使用基于有向无环图的数据流动图刻画出该流数据处理任务中计算节点之间的数据流动关系;在该数据流动模型下,流数据处理任务分配给若干个计算节点,计算节点之间存在数据流入或流出的关系;在该基于有向无环图的数据流动图中,包含对应计算节点的顶点和对应数据流动的有向边,具体为:①每个顶点对应流数据处理系统分配给该流数据处理任务的一个计算节点,每个计算节点进行一系列的数据处理任务;②两顶点之间的有向边表示一个计算节点完成系统分配给该节点的计算任务后将处理好的数据发送给下一个计算节点;③顶点的入度表示这个顶点对应的计算节点会从哪些计算节点接收数据,顶点的出度表示这个顶点对应的计算节点会将处理好的数据发送给哪些计算节点;④入度为0的顶点对应分配给该流数据处理任务的初始节点,也就是流数据处理系统从数据源接收流数据的节点;⑤出度为0的顶点对应分配给该流数据处理任务的结束节点,是将最后的处理结果输出或存储的节点;
本实施例中,生成的数据流动图如图3(a)所示,其中:顶点V1、V2、V3、V4和V5对应系统分配给该流数据处理任务的计算节点,每个计算节点会进行一系列的数据处理任务;入度为0的顶点即V1对应初始节点,是从数据源接收数据的节点;出度为0的顶点即V3和V5对应结束节点,是将最后的处理结果输出或存储的节点。
步骤2:将基于有向无环图的数据流动图用邻接表和逆邻接表的形式保存;根据后续步骤的需要,将该图用特定的方法保存,便于计算各个顶点入度出度的同时读取顶点对应节点上的任务所需的关键词;具体方法为:
步骤2.1:根据数据流动图建立能够存储该图的邻接表,用于计算图中各个顶点的出度;
首先给数据流动图中的各个顶点独自建立一个链表,用链表的头结点存储该顶点,用链表中其他结点存储以该顶点为弧尾(即流出节点)的邻接点;与此同时,将所有顶点对应的链表的头结点存储到一个数组中;各链表在存储各顶点对应的邻接点数据时,仅存储该邻接点位于数组中的位置下标;此外,存储各顶点的链表结点结构分为数据域和指针域两部分;数据域用于存储该顶点对应的计算节点执行任务需要的关键词,指针域用于链接下一个链表结点;本实施例中,最终建立的邻接表如图3(b)所示。
步骤2.2:根据数据流动图建立存储该图的逆邻接表,用于计算图中各个顶点的入度;
与步骤2.1中邻接表的建立方法类似,建立逆邻接表同样需要首先给数据流动图中的各个顶点独自建立一个链表,同样用链表的头结点存储该顶点,与邻接表不同,逆邻接表用链表中其他结点存储的是以该顶点为弧头(即流入节点)的邻接点;与此同时,将所有顶点对应的链表的头结点同样存储到一个数组中;各链表在存储各顶点对应的邻接点数据时,同样仅存储该邻接点位于数据中的位置下标;此外,存储各顶点的链表结点结构同样分为数据域和指针域两部分;数据域用于存储该顶点对应的计算节点执行任务需要的关键词,指针域用于链接下一个链表结点;本实施例中,最终建立的逆邻接表如图3(c)所示。
步骤3:针对流数据处理任务的初始节点,使用基于索引和前瞻性自适应哈夫曼编码的数据压缩方法将该节点接收到的数据压缩;初始节点从数据源接收初始数据,将数据发送到后续计算节点前,查看数据流动图对应的的邻接表获得后续计算节点的任务关键词,根据关键词建立索引后在即将发送给后续计算节点的数据上使用前瞻性自适应哈夫曼编码进行压缩;具体方法为:
步骤3.1:判断当前计算节点是否为初始节点,若是,则执行步骤3.2,否则执行步骤4;
读取步骤2建立好的邻接表和逆邻接表,分析当前计算节点在数据流动图中对应的顶点的入度和出度,若当前计算节点对应的顶点的入度为0,则判断当前计算节点为初始节点;本实施例中,读取逆邻接表后可知V1是初始节点。
步骤3.2:使用基于索引和前瞻性自适应哈夫曼编码的数据压缩方法将初始节点接收到的数据压缩;
步骤3.2.1:初始节点在把收到的数据发送到后续计算节点之前,将每条数据表示为包含k种元素的k元组:
{e1,e2,e3,…,ek}
其中,ek表示该条数据中的第k个元素;
本实施例中,初始节点V1将从数据源接收到的数据发送到后续节点之前,将每条数据表示为包含以下六种元素的六元组:
{TimeStamp,IP Address,UserNamme,URL,UserAgent,VisitLength}
其中,TimeStamp表示用户访问的时间,IP Address表示用户的IP地址,UserName表示用户登录的用户名,URL表示用户访问的页面,UserAgent表示用户的访问途径,VisitLength表示用户的访问时长。
步骤3.2.2:读取建立好的邻接表,找到从该初始节点接收数据的计算节点的编号,并从存储该计算节点的链表数据域中获得该计算节点执行任务需要的关键词e(e的个数不固定,可以不止一个);若关键词在该k元组中,当关键词个数为一时,设定此关键词在k元组中位于p位置,1≤p≤k,则将其移至k元组的最前方以便后续读取使用,此时该k元组转变成如下形式:
{ep,e1,e2,e3,…,ep-1,ep+1,…,ek}
当关键词个数大于一时,重复上述移动关键词的操作,或根据关键词的重要度找出最重要的一个关键词,从而只移动一次关键词,寻找最重要关键词的公式如下:
eprin=max(λ1e12e23e3,…,λkek)
其中,eprin为最重要的关键词,λ123,…,λk分别为各关键词的重要系数,它与关键词在总任务中的需求程度有关;
本实施例中,从初始节点接收数据的节点只有V2,其编号为1,并且从存储该节点的数据域中获得的关键词为VisitLength。因此需要将该关键词调整至六元组中的第一位:
[VisitLength,TimeStamp,IP Address,UserName,URL,UserAgent}
步骤3.2.3:将经过步骤3.2.2中移动关键词操作处理后的数据根据后续计算节点需要的关键词排序,同时依据此关键词建立索引表,表中的索引值为关键词的各个具体值,对应的地址为其在数据中的位置,即相对于首地址的偏移量,建立索引时可根据具体情况选择采用B+树索引、哈希索引、链表索引等常用索引结构;
本实施例中,将数据重新根据关键词VisitLength排序。之后,根据该关键词建立相应的索引。与常规的索引结构最终指向数据存储地址的方式不同,本发明建立的索引最终指向的是该条数据在总数据中的偏移量,并且在压缩时该偏移量会随之更新。如此一来,流数据处理系统可以在读取该索引时直接定位到所需要的数据在总数据中的位置。
步骤3.2.4:统计移动关键词操作处理后的数据中出现过的字符种类以及数据中关键词对应的出现次数大于设定阈值的字符串,将其作为编码表中的元素构建编码表,并根据这些元素构建前瞻性自适应哈夫曼编码树得到元素对应的编码;
与传统自适应哈夫曼编码方法看待编码表中的元素频率是从零开始且不断递增的编码方式不同,在构建前瞻性自适应哈夫曼编码树时,看待编码表中的元素频率是从真实值不断递减至零的;构建前瞻性自适应哈夫曼编码树得到元素对应的编码的具体方法为:
步骤S1:对于给定的需要压缩的文本T,将其根据编码表中的元素拆分为T=x1…xs,xs为编码表中的某一个元素,首先计算出编码表中各个元素的出现频率,然后根据编码表中所有的元素及其各自对应的出现频率构建出一个标准的静态哈夫曼编码树;
步骤S2:对于文本x1…xs-1,按照文本内的顺序依次将对应的码字输出到编码文件中,然后修改哈夫曼树以对应后续文本内元素的出现频率;例如,已经输入了x1,则修改哈夫曼树以对应{x2…xs}的频率;已经输入了x2,则修改哈夫曼树以对应{x3…xs}内的频率。
步骤S3:对于文本xs,由于已经是最后的字符,因此只需要将它对应的码字输出到编码文件中,无需再修改哈夫曼树;
步骤3.2.5:最终的编码结果用编码表保存,之后根据此编码表将总数据压缩,压缩时根据编码表中每一种字符占据的比特位更新索引表中每条数据在压缩数据中的比特偏移量;最后将压缩好的数据与编码表和更新后的索引表共同发送到后续计算节点;此外,编码表和更新后的索引表也能够根据实际任务需求决定是否将其压缩后再传输;
本实施例中,从初始节点接收数据的节点V2会将接收到的数据根据关键词VisitLength去除无效数据,显然每条数据都会包含一条VisitLength,因此可以找出部分出现频率较高的VisitLength当作编码表中的元素与其他出现过的字符一同构建编码树以便节省总比特长度。与常规的哈夫曼编码树的构建方式不同,本发明中构建的前瞻性自适应哈夫曼编码树结合了常用的自适应哈夫曼算法FGK算法和Vitter算法的优点,同时在设计上反转编码元素引用的方向,从而最终实现比静态哈夫曼编码节省空间的效果,因此提高了压缩效率。同时,由于编码表中的元素不一定都只包含一个字符,因此在评判每个元素的权重时也不像常规的哈夫曼编码一样只考虑元素出现的频率,而是要综合元素的长度、元素出现的频率和元素的偏移量等因素共同判断。
步骤4:针对中间计算节点,使用半解压的数据压缩方法将接收到的数据解压和再次压缩;
中间计算节点接收来自先前计算节点的数据,若该数据为压缩数据,则根据此计算节点的实际任务需求,将其部分解压,之后将任务所需的解压后的数据送入CPU计算;计算完成后将计算结果发送给后续计算节点之前,同样针对性地对数据进行压缩;具体方法为:
步骤4.1:判断当前计算节点是否为中间节点,若是,则执行步骤4.2,否则执行步骤5;
读取建立好的邻接表和逆邻接表,分析当前计算节点在数据流动图中对应的顶点的入度和出度,若当前计算节点对应的顶点的入度与出度均不为0,则判断当前计算节点是中间计算节点;
本实施例中,读取邻接表和逆邻接表后可知V2和V4是中间节点。由于中间节点上的操作步骤类似,因此本实施例中只介绍在中间节点V2上的操作。
步骤4.2:中间计算节点若接收到先前计算节点发送过来的压缩数据,则将其部分解压:首先分析当前的实际任务需求,若当前的实际任务只需要接收到的全部数据中的部分数据,则查看索引表,定位到该任务需求的数据所在的偏移量范围,对照编码表将这部分数据解压后直接送入CPU计算;
本实施例中,中间节点V2会接收来自初始节点V1的以VisitLength为关键词建立索引的压缩数据。中间节点V2的任务是去除无效数据并将剩余数据规范化处理,因此首先需要去除无效的数据,无效数据的判断中很关键的一条是VisitLength小于500毫秒,因此在解压数据前便可以首先通过索引表将VisitLength小于500毫秒的数据剔除,接着将所需的部分数据所在的部分通过对照编码表进行解压并同时送入CPU进行规范化的运算,部分解压的示意图如图4所示。
步骤4.3:中间计算节点完成该节点上的计算任务后,在将计算结果发送到后续计算节点之前,同样使用基于索引和前瞻性自适应哈夫曼编码的的数据压缩方法对即将发出的数据进行压缩;
本实例中,中间节点V2将规范化处理后的数据根据关键词URL建立索引并压缩后发送到结束节点V3。
步骤5:针对结束节点,将接收到的数据部分解压;
读取建立好的邻接表和逆邻接表后,若当前计算节点所对应的顶点出度为0,则判断当前节点为结束节点;
结束节点接收来自先前计算节点的数据,若该数据为压缩数据,则根据结束节点的实际任务需要,将其部分解压,之后将任务所需的数据送入CPU计算;
CPU计算完成后,将最终的计算结果输出或存储时根据实际需求针对性地选择是否将最终结果压缩;如果最终的计算结果需要被存储并且短时间内不会被使用,便可以选择将最终结果压缩,压缩时可以选择使用本发明提出的压缩算法,也可以选择使用常见的其他压缩算法。如果最终的计算结果将会被直接输出或短时间内就会被使用,那么也可以选择不将最终结果压缩。
本实施例中,读取邻接表和逆邻接表后可知V3和V5是中间节点。由于中间节点上的操作步骤类似,因此本实施例只介绍在结束节点V3上的操作。结束节点V3接收来自中间节点V2的根据关键词URL建立索引后压缩的数据,在结束节点V3上需要计算整段时间内news类URL的独立访客数量,因此根据索引找到所需的new类URL数据在整体数据中的位置并将其部分解压,然后将这部分数据根据用户去重最终得到独立访客数量并将结果输出。
步骤6:结合数据流动图,评估在该流数据处理任务上应用半解压的数据压缩方法的估算代价,估算代价公式如下:
其中,qtask表示在流数据处理任务上应用半解压数据压缩方法的估算代价,n和b分别表示数据流动图中顶点和边的个数,表示第i个顶点需要压缩的数据量,vc表示压缩速度,/>表示第i个顶点需要解压的数据量,vd表示解压速度,α表示压缩率,/>表示第j条边的传输数据量,/>表示第j条边的网络传输速率;
当qtask<0时,半解压的数据压缩方法适用于该流数据处理任务的性能优化,且此时|qtask|的值越大性能优化的效果越理想。
本实施例中,整段时间内的预估数据量约为200MB,数据压缩算法的压缩率约为40%,压缩速度约为100MB/s,解压速度约为400MB/s,网络传输速度约为100Mb/s,最终得到的qtask=-30.4,因此本发明的半解压的数据压缩方法适用于该流数据处理任务的性能优化。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明权利要求所限定的范围。

Claims (7)

1.一种优化流数据处理性能的半解压数据压缩方法,其特征在于:
将流数据处理系统中的流数据处理任务抽象为基于有向无环图的数据流动图;
将数据流动图用邻接表和逆邻接表的形式保存;
基于数据流动图对应的邻接表和逆邻接表,判断流数据处理任务各计算节点的类型;
流数据处理任务的初始节点将接收到的数据压缩后发送给中间计算节点;
中间计算节点将接收到的数据部分解压用于计算,并将计算结果再次压缩后发送到后续节点;
结束节点将接收到的数据部分解压后用于计算;
包括以下步骤:
步骤1:将流数据处理系统中的流数据处理任务抽象为图;对于给定的流数据处理系统中的特定任务,分析其在流数据处理系统中各个计算节点上的任务分配,建立该任务的数据流动模型并抽象为一个有向无环图,基于该数据流动模型分析每个计算节点上的数据流入和数据流出;
步骤2:将基于有向无环图的数据流动图用邻接表和逆邻接表的形式保存;
步骤3:针对流数据处理任务的初始节点,将该节点接收到的数据压缩;
初始节点从数据源接收初始数据,将数据发送到后续计算节点前,查看数据流动图对应的邻接表获得后续计算节点的任务关键词,根据关键词建立索引后在即将发送给后续计算节点的数据上使用前瞻性自适应哈夫曼编码进行压缩;
步骤4:针对中间计算节点,使用半解压的数据压缩方法将接收到的数据解压和再次压缩;
中间计算节点接收来自先前计算节点的数据,若该数据为压缩数据,则根据此计算节点的实际任务需求,将其部分解压,之后将任务所需的解压后的数据送入CPU计算;计算完成后将计算结果发送给后续计算节点之前,同样针对性地对数据进行压缩;
步骤5:针对结束节点,将接收到的数据部分解压;
读取建立好的邻接表和逆邻接表后,若当前计算节点所对应的顶点出度为0,则判断当前节点为结束节点;
结束节点接收来自先前计算节点的数据,若该数据为压缩数据,则根据结束节点的实际任务需要,将其部分解压,之后将任务所需的数据送入CPU计算;
CPU计算完成后,将最终的计算结果输出或存储时根据实际需求针对性地选择是否将最终结果压缩;
步骤6:结合数据流动图,评估在该流数据处理任务上应用半解压的数据压缩方法的估算代价。
2.根据权利要求1所述的一种优化流数据处理性能的半解压数据压缩方法,其特征在于:所述步骤1的具体方法为:
分析给定流数据处理任务,建立数据流动模型;所述数据流动模型使用基于有向无环图的数据流动图刻画出该流数据处理任务中计算节点之间的数据流动关系;在该数据流动模型下,流数据处理任务分配给若干个计算节点,计算节点之间存在数据流入或流出的关系;在该基于有向无环图的数据流动图中,包含对应计算节点的顶点和对应数据流动的有向边,具体为:每个顶点对应流数据处理系统分配给该流数据处理任务的一个计算节点,每个计算节点进行一系列的数据处理任务;两顶点之间的有向边表示一个计算节点完成系统分配给该节点的计算任务后将处理好的数据发送给下一个计算节点;顶点的入度表示这个顶点对应的计算节点会从哪些计算节点接收数据,顶点的出度表示这个顶点对应的计算节点会将处理好的数据发送给哪些计算节点;入度为0的顶点对应分配给该流数据处理任务的初始节点,也就是流数据处理系统从数据源接收流数据的节点;出度为0的顶点对应分配给该流数据处理任务的结束节点,是将最后的处理结果输出或存储的节点。
3.根据权利要求2所述的一种优化流数据处理性能的半解压数据压缩方法,其特征在于:所述步骤2的具体方法为:
步骤2.1:根据数据流动图建立能够存储该图的邻接表,用于计算图中各个顶点的出度;
首先给数据流动图中的各个顶点独自建立一个链表,用链表的头结点存储该顶点,用链表中其他结点存储以该顶点为弧尾即流出节点的邻接点;与此同时,将所有顶点对应的链表的头结点存储到一个数组中;各链表在存储各顶点对应的邻接点数据时,仅存储该邻接点位于数组中的位置下标;此外,存储各顶点的链表结点结构分为数据域和指针域两部分;数据域用于存储该顶点对应的计算节点执行任务需要的关键词,指针域用于链接下一个链表结点;
步骤2.2:根据数据流动图建立存储该图的逆邻接表,用于计算图中各个顶点的入度;
建立逆邻接表同样需要首先给数据流动图中的各个顶点独自建立一个链表,同样用链表的头结点存储该顶点,与邻接表不同,逆邻接表用链表中其他结点存储的是以该顶点为弧头即流入节点的邻接点;与此同时,将所有顶点对应的链表的头结点同样存储到一个数组中;各链表在存储各顶点对应的邻接点数据时,同样仅存储该邻接点位于数据中的位置下标;此外,存储各顶点的链表结点结构同样分为数据域和指针域两部分;数据域用于存储该顶点对应的计算节点执行任务需要的关键词,指针域用于链接下一个链表结点。
4.根据权利要求3所述的一种优化流数据处理性能的半解压数据压缩方法,其特征在于:所述步骤3的具体方法为:
步骤3.1:判断当前计算节点是否为初始节点,若是,则执行步骤3.2,否则执行步骤4;
读取步骤2建立好的邻接表和逆邻接表,分析当前计算节点在数据流动图中对应的顶点的入度和出度,若当前计算节点对应的顶点的入度为0,则判断当前计算节点为初始节点;
步骤3.2:使用基于索引和前瞻性自适应哈夫曼编码的数据压缩方法将初始节点接收到的数据压缩;
步骤3.2.1:初始节点在把收到的数据发送到后续计算节点之前,将每条数据表示为包含k种元素的k元组:
{e1,e2,e3,…,ek}
其中,ek表示该条数据中的第k个元素;
步骤3.2.2:读取建立好的邻接表,找到从该初始节点接收数据的计算节点的编号,并从存储该计算节点的链表数据域中获得该计算节点执行任务需要的关键词e;若关键词在该k元组中,当关键词个数为一时,设定此关键词在k元组中位于p位置,1≤p≤k,则将其移至k元组的最前方以便后续读取使用,此时该k元组转变成如下形式:
{ep,e1,e2,e3,…,ep-1,ep+1,…,ek}
当关键词个数大于一时,重复移动关键词的操作,或根据关键词的重要度找出最重要的一个关键词,从而只移动一次关键词,寻找最重要关键词的公式如下:
eprin=max(λ1e12e23e3,…,λkek)
其中,eprin为最重要的关键词,λ123,…,λk分别为各关键词的重要系数,它与关键词在总任务中的需求程度有关;
步骤3.2.3:将经过步骤3.2.2中移动关键词操作处理后的数据根据后续计算节点需要的关键词排序,同时依据此关键词建立索引表,表中的索引值为关键词的各个具体值,对应的地址为其在数据中的位置,即相对于首地址的偏移量;
步骤3.2.4:统计移动关键词操作处理后的数据中出现过的字符种类以及数据中关键词对应的出现次数大于设定阈值的字符串,将其作为编码表中的元素构建编码表,并根据这些元素构建前瞻性自适应哈夫曼编码树得到元素对应的编码;
步骤3.2.5:最终的编码结果用编码表保存,之后根据此编码表将总数据压缩,压缩时根据编码表中每一种字符占据的比特位更新索引表中每条数据在压缩数据中的比特偏移量;最后将压缩好的数据与编码表和更新后的索引表共同发送到后续计算节点;此外,编码表和更新后的索引表也能够根据实际任务需求决定是否将其压缩后再传输。
5.根据权利要求4所述的一种优化流数据处理性能的半解压数据压缩方法,其特征在于:所述构建前瞻性自适应哈夫曼编码树得到元素对应的编码的具体方法为:
步骤S1:对于给定的需要压缩的文本T,将其根据编码表中的元素拆分为T=x1…xs,xs为编码表中的某一个元素,首先计算出编码表中各个元素的出现频率,然后根据编码表中所有的元素及其各自对应的出现频率构建出一个标准的静态哈夫曼编码树;
步骤S2:对于文本x1…xs-1,按照文本内的顺序依次将对应的码字输出到编码文件中,然后修改哈夫曼树以对应后续文本内元素的出现频率;
步骤S3:对于文本xs,由于已经是最后的字符,因此只需要将它对应的码字输出到编码文件中,无需再修改哈夫曼树。
6.根据权利要求5所述的一种优化流数据处理性能的半解压数据压缩方法,其特征在于:所述步骤4的具体方法为:
步骤4.1:判断当前计算节点是否为中间节点,若是,则执行步骤5.2,否则执行步骤6;
读取建立好的邻接表和逆邻接表,分析当前计算节点在数据流动图中对应的顶点的入度和出度,若当前计算节点对应的顶点的入度与出度均不为0,则判断当前计算节点是中间计算节点;
步骤4.2:中间计算节点若接收到先前计算节点发送过来的压缩数据,则将其部分解压:首先分析当前的实际任务需求,若当前的实际任务只需要接受到的全部数据中的部分数据,则查看索引表,定位到该任务需求的数据所在的偏移量范围,对照编码表将这部分数据解压后直接送入CPU计算;
步骤4.3:中间计算节点完成该节点上的计算任务后,在将计算结果发送到后续计算节点之前,同样使用基于索引和前瞻性自适应哈夫曼编码的的数据压缩方法对即将发出的数据进行压缩。
7.根据权利要求6所述的一种优化流数据处理性能的半解压数据压缩方法,其特征在于:所述估算代价公式如下:
其中,qtask表示在流数据处理任务上应用半解压数据压缩方法的估算代价,m和n分别表示数据流动图中顶点和边的个数,表示第i个顶点需要压缩的数据量,vc表示压缩速度,表示第i个顶点需要解压的数据量,vd表示解压速度,α表示压缩率,/>表示第j条边的传输数据量,/>表示第j条边的网络传输速率;
当qtask<0时,半解压的数据压缩方法适用于该流数据处理任务的性能优化。
CN202111383322.5A 2021-11-22 2021-11-22 一种优化流数据处理性能的半解压数据压缩方法 Active CN113992208B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111383322.5A CN113992208B (zh) 2021-11-22 2021-11-22 一种优化流数据处理性能的半解压数据压缩方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111383322.5A CN113992208B (zh) 2021-11-22 2021-11-22 一种优化流数据处理性能的半解压数据压缩方法

Publications (2)

Publication Number Publication Date
CN113992208A CN113992208A (zh) 2022-01-28
CN113992208B true CN113992208B (zh) 2024-05-03

Family

ID=79749621

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111383322.5A Active CN113992208B (zh) 2021-11-22 2021-11-22 一种优化流数据处理性能的半解压数据压缩方法

Country Status (1)

Country Link
CN (1) CN113992208B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112257364A (zh) * 2020-10-23 2021-01-22 北京大学 一种gpu加速计算的集成电路静态时序分析方法
CN112764686A (zh) * 2021-01-26 2021-05-07 东北大学 一种基于数据压缩的大数据处理系统节能方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9298722B2 (en) * 2009-07-16 2016-03-29 Novell, Inc. Optimal sequential (de)compression of digital data
US11347704B2 (en) * 2015-10-16 2022-05-31 Seven Bridges Genomics Inc. Biological graph or sequence serialization

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112257364A (zh) * 2020-10-23 2021-01-22 北京大学 一种gpu加速计算的集成电路静态时序分析方法
CN112764686A (zh) * 2021-01-26 2021-05-07 东北大学 一种基于数据压缩的大数据处理系统节能方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
H-PCPIR-V:基于Huffman编码的PCPIR-V优化算法;王波涛;李昂;陈月梅;邓诗卓;常博涵;吴俊学;;计算机工程与科学;20180315(第03期);全文 *
基于Hadoop的大数据查询系统简述;陈梦杰;陈勇旭;贾益斌;张一川;宋杰;;计算机与数字工程;20131220(第12期);全文 *
基于邻接矩阵的近似Prim算法解决无向图特定问题;王敏;杨秀香;李云飞;;渭南师范学院学报;20151120(第22期);全文 *

Also Published As

Publication number Publication date
CN113992208A (zh) 2022-01-28

Similar Documents

Publication Publication Date Title
US9223765B1 (en) Encoding and decoding data using context model grouping
US9363309B2 (en) Systems and methods for compressing packet data by predicting subsequent data
US9558241B2 (en) System and method for performing longest common prefix strings searches
CN102571966B (zh) 一种大型xml文件的网络传输方法
US7966424B2 (en) Data compression
JP4456554B2 (ja) データ圧縮方法及び圧縮データ送信方法
US6100825A (en) Cluster-based data compression system and method
EP4350527A1 (en) Data compression method and apparatus, and computing device and storage medium
US11722148B2 (en) Systems and methods of data compression
JP3083730B2 (ja) データ情報を圧縮するためのシステムおよび方法
CN116112434B (zh) 一种路由器数据智能缓存方法及系统
US20200294629A1 (en) Gene sequencing data compression method and decompression method, system and computer-readable medium
WO2008042716A2 (en) Knowledge based encoding of data with multiplexing to facilitate compression
CN115599757A (zh) 数据压缩方法、装置、计算设备及存储系统
CN116015311A (zh) 基于滑动字典实现的Lz4文本压缩方法
Taylor et al. Robust header compression (ROHC) in next-generation network processors
CN1426629A (zh) 使用多个编码器的优化无损压缩的方法和装置
CN113992208B (zh) 一种优化流数据处理性能的半解压数据压缩方法
CN108563795A (zh) 一种加速压缩流量正则表达式匹配的Pairs方法
CN116208772A (zh) 数据处理方法、装置、电子设备及计算机可读存储介质
Kutay et al. Semantic Communications: A Paradigm Whose Time Has Come
CN113902097A (zh) 针对稀疏化cnn神经网络模型的游程编码加速器及方法
JP4456574B2 (ja) 圧縮データ送信方法
CN116827682B (zh) 数据处理方法、装置及计算机设备
CN111866520A (zh) 编解码方法、编解码设备以及通信系统

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