CN112800288B - 图流数据处理的方法 - Google Patents

图流数据处理的方法 Download PDF

Info

Publication number
CN112800288B
CN112800288B CN201911114115.2A CN201911114115A CN112800288B CN 112800288 B CN112800288 B CN 112800288B CN 201911114115 A CN201911114115 A CN 201911114115A CN 112800288 B CN112800288 B CN 112800288B
Authority
CN
China
Prior art keywords
fingerprint
candidate storage
stored
stream data
determining
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
CN201911114115.2A
Other languages
English (en)
Other versions
CN112800288A (zh
Inventor
邹磊
苟向阳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Peking University
Original Assignee
Peking University
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 Peking University filed Critical Peking University
Priority to CN201911114115.2A priority Critical patent/CN112800288B/zh
Publication of CN112800288A publication Critical patent/CN112800288A/zh
Application granted granted Critical
Publication of CN112800288B publication Critical patent/CN112800288B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/904Browsing; Visualisation therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Collating Specific Patterns (AREA)

Abstract

本申请公开了一种图流数据处理的方法,属于数据处理技术领域。该方法应用于FPGA中,该FPGA包括多个控制端口,该FPGA的存储区被配置为包括矩阵区和缓冲区,矩阵区被划分为多个子矩阵区,每个控制端口被配置为控制一个或多个子矩阵区中的图流数据的处理,且不同控制端口控制的子矩阵区不同。该方法包括:确定待查询的图流数据的端点信息;基于端点信息,确定指纹和多个候选存储位置;通过每个控制端口,查询对应的候选存储位置中是否存储有所述指纹,其中,所述对应的候选存储位置位于所述控制端口控制的子矩阵区中。采用本申请,可以有效解决相关技术中图流数据的查询效率低的技术问题。

Description

图流数据处理的方法
技术领域
本申请涉及数据处理技术领域,具体涉及一种图流数据处理的方法
背景技术
图流数据是一种被广泛使用的数据形式,图流数据包括边和边的属性信息(简称为边属性信息),边包括起始点和终止点。例如,在一些银行的图流数据中,边的起始点和终止点可以表示两个账户,边属性信息代表两个账户之间的转账关系。在图流数据的处理过程中,均需要先在存储区查询图流数据。例如,在存储某一图流数据时,需要先在存储区查询是否已存储有该图流数据,如果已存储,则对存储的图流数据的边属性信息进行更新;如果没有存储,则可以将该图流数据存储在存储区。又例如,在删除某一图流数据时,需要先在存储区查询到该图流数据的存储位置,才能进行后续的删除处理。因此,图流数据的查询的速度,直接影响到图流数据的处理的效率。另外,由于图流数据的更新十分频繁,新的边的添加持续不断且速度较高,所以图流数据的查询的效率的高低对图流数据的处理的影响更加明显。
相关技术中提供了一种图流数据处理的方法。在该方法中存储区被配置为包括矩阵区和缓冲区,矩阵区用于存储大部分的图流数据,缓冲区用于存储在矩阵区找不到存储位置的图流数据,一般图流数据应尽可能的存储在矩阵区。以存储图流数据的场景为例,首先需要在矩阵区查询图流数据。首先,基于待存储的图流数据的边的起始点s和终止点d,确定出两个地址序列以及该图流数据的指纹。为了便于表述,这里用hi(s)表示基于起始点s确定出的地址序列中的第i+1个地址,用hj(d)表示基于终止点d确定出的地址序列中的第j+1个地址,其中,0≤i≤r-1,0≤j≤r-1。然后,在矩阵区中查询存储位置(hi(s),hj(d))处的存储情况,也即共需要查询r×r个存储位置,这些存储位置可以称为候选存储位置。由于不同的边对应的候选存储位置可能有重合的,所以对某一边来说,它的候选存储位置可能都存储了其他图流数据。如果候选存储位置中包含未存储有指纹的存储位置(简称为空存储位置),且候选存储位置中未存储有该指纹,则将待存储的图流数据存储在某一空存储位置中。如果候选存储位置中均存储有指纹,且存储的指纹都不是待存储的图流数据的指纹,则将待存储的图流数据存储在缓冲区。如果候选存储位置中存储有该指纹,则将其对应的边属性信息进行更新即可。
在实现本申请的过程中,发明人发现相关技术至少存在以下问题:
为了使得图流数据尽可能多的存储在矩阵区,则需要使得基于端点确定出的地址序列的长度r尽可能的长,这样每个图流数据对应的r×r个候选存储位置越多,这样,候选存储位置存储满的可能性就越低,则图流数据存储在矩阵区的可能性就较大。但是,r越长,在查询图流数据时,需要查询的候选存储位置也就越多,这使得图流数据的查询效率变低。
发明内容
本申请实施例提供了一种图流数据处理的方法和装置,可以解决相关技术中存在的技术问题。所述图流数据处理的方法和装置的技术方案如下:
第一方面,提供了一种图流数据处理的方法,所述方法应用于现场可编程逻辑门阵列FPGA中,所述FPGA包括多个控制端口,所述FPGA的存储区被配置为包括矩阵区和缓冲区,所述矩阵区被划分为多个子矩阵区,每个控制端口被配置为控制一个或多个子矩阵区中的图流数据的处理,且不同控制端口控制的子矩阵区不同,所述方法包括:
确定待查询的图流数据的端点信息;
基于所述端点信息,确定指纹和多个候选存储位置;
通过每个控制端口,查询对应的候选存储位置中是否存储有所述指纹,其中,所述对应的候选存储位置位于所述控制端口控制的子矩阵区中。
在一种可能的实现方式中,所述待查询的图流数据为待存储的图流数据,所述确定待查询的图流数据的端点信息,包括:
确定待存储的图流数据的端点信息和边属性信息;
所述通过每个控制端口,查询对应的候选存储位置中是否存储有所述指纹之后,还包括:
如果在所述多个候选存储位置中存在空存储位置,且所述多个候选存储位置中未存储有所述指纹,则在查询出的空存储位置中选取目标存储位置,将所述指纹和所述边属性信息存储在所述目标存储位置中;
如果在所述多个候选存储位置中已存储有所述指纹,则基于所述边属性信息,对存储有所述指纹的候选存储位置存储的边属性信息进行更新;
如果在所述多个候选存储位置中不存在空存储位置,且所述多个候选存储位置中未存储有所述指纹,则将所述指纹和所述边属性信息存储在所述缓冲区。
在一种可能的实现方式中,所述待查询的图流数据为待删除的图流数据,所述通过每个控制端口,查询对应的候选存储位置中是否存储有所述指纹之后,还包括:
如果在所述多个候选存储位置中包含存储有所述指纹的目标候选存储位置,则将所述目标候选存储位置存储的图流数据删除。
在一种可能的实现方式中,所述通过每个控制端口,查询对应的候选存储位置中是否存储有所述指纹之后,还包括:
如果在所述多个候选存储位置中包含存储有所述指纹的目标候选存储位置,则返回所述目标候选存储位置存储的边属性信息。
在一种可能的实现方式中,所述矩阵区包括r行r列的子矩阵区,且每个子矩阵区包括w行w列的存储位置,所述端点信息包括起始点s和终止点d,所述基于所述端点信息,确定指纹和多个候选存储位置,包括:
基于公式确定起始点指纹和终止点指纹,其中,表示下取整运算,f(s)表示起始点指纹,f(d)表示终止点指纹;
基于公式h(s)=s%w和h(d)=d%w,确定起始点的初始地址和终止点的初始地址,其中,%表示取余运算,h(s)表示起始点的初始地址,h(d)表示终止点的初始地址;
基于公式确定两个长度为r的序列{qi(s)}和{qj(d)},其中,0≤i≤r,0≤j≤r且均为整数,a、c和Q为正整数;
基于公式hi(s)=(h(s)+qi(s))%w和hj(d)=(h(d)+qj(d))%w,确定两个长度为r的地址序列{hi(s)}和{hj(d)};
对于每个i和j,确定第i行、第j列的子矩阵区中的第hi(s)行、第hj(d)列的存储位置为候选存储位置。
在一种可能的实现方式中,所述端点信息包括终止点,所述基于所述端点信息,确定指纹和多个候选存储位置,包括:
基于所述终止点,确定终止点指纹和多个候选存储位置;
所述通过每个控制端口,查询对应的候选存储位置中是否存储有所述指纹之后,还包括:
对于每个候选存储位置,如果确定出的终止点指纹与所述候选存储位置中存储的终止点指纹相同,则将所述候选存储位置中存储的起始点指纹对应的起始点确定为所述终止点的一跳前驱。
在一种可能的实现方式中,所述矩阵区包括r行r列的子矩阵区,且每个子矩阵包括w行w列的存储位置,所述端点信息包括终止点d,所述基于所述终止点信息,确定终止点指纹以及多个候选存储位置,包括:
基于公式确定终止点指纹,其中,表示下取整运算,f(d)表示终止点的初始地址;
基于公式h(d)=d%w,确定终止点的初始地址,其中,%表示取余运算,h(d)表示终止点的初始地址;
基于公式确定长度为r的序列{qj(d)},其中,0≤j≤r且均为整数,a、c和Q为正整数;
基于公式hj(d)=(h(d)+qj(d))%w,确定长度为r的地址序列和{hj(d)};
对于每个j,确定第j列的每个子矩阵区中第hj(d)列的所有存储位置为候选存储位置。
在一种可能的实现方式中,所述端点信息包括起始点,所述基于所述端点信息,确定指纹和多个候选存储位置,包括:
基于所述起始点,确定起始点指纹和多个候选存储位置;
所述通过每个控制端口,查询对应的候选存储位置中是否存储有所述指纹之后,还包括:
对于每个候选存储位置,如果确定出的起始点指纹与所述候选存储位置中存储的起始点指纹相同,则将所述候选存储位置中存储的终止点指纹对应的终止点确定为所述起始点的一跳后继。
在一种可能的实现方式中,所述矩阵区包括r行r列的子矩阵区,且每个子矩阵包括w行w列的存储位置,所述端点信息包括起始点s,所述基于所述端点信息,确定指纹和多个候选存储位置,包括:
基于公式确定起始点指纹,其中,表示下取整运算,f(s)表示起始点指纹;
基于公式h(s)=s%w,确定起始点的初始地址,其中,%表示取余运算,h(s)表示起始点的初始地址;
基于公式确定长度为r的序列{qi(s)},其中,0≤i≤r且为整数,a、c和Q为正整数;
基于公式hi(s)=(h(s)+qi(s))%w,确定长度为r的地址序列{hi(s)};
对于每个i,确定第i行的每个子矩阵区中第hi(s)行的所有存储位置为候选存储位置。
在一种可能的实现方式中,所述通过每个控制端口,查询对应的候选存储位置中是否存储有所述指纹,包括:
通过多个控制端口,并行的查询对应的候选存储位置中是否存储有所述指纹。
在一种可能的实现方式中,所述通过每个控制端口,查询对应的候选存储位置中是否存储有所述指纹,包括:
通过所述多个控制端口并行的控制对应的查询结果归并,得到多个归并后的查询结果;
将归并后的查询结果分为多组,由多个控制端口并行的控制多组查询结果的归并,再次得到归并后的查询结果,如果归并后的查询结果的数量不小于设定数量,则再次进行将归并后的查询结果分为多组的处理,直至归并后的查询结果的数量小于设定数量;
通过一个控制端口控制小于设定数量的查询结果归并,得到最终的查询结果。
在一种可能的实现方式中,所述通过每个控制端口,查询对应的候选存储位置中是否存储有所述指纹,包括:
对于每个控制端口,通过所述控制端口流水线化查询对应的多个候选存储位置中是否存储有所述指纹。
第二方面,提供了一种图流数据处理的装置,所述装置应用于现场可编程逻辑门阵列FPGA中,所述FPGA包括多个控制端口,所述FPGA的存储区被配置为包括矩阵区和缓冲区,所述矩阵区被划分为多个子矩阵区,每个控制端口被配置为控制一个或多个子矩阵区中的图流数据的处理,且不同控制端口控制的子矩阵区不同,所述装置包括:
第一确定模块,用于确定待查询的图流数据的端点信息;
第二确定模块,用于基于所述端点信息,确定指纹和多个候选存储位置;
查询模块,用于通过每个控制端口,查询对应的候选存储位置中是否存储有所述指纹,其中,所述对应的候选存储位置位于所述控制端口控制的子矩阵区中。
在一种可能的实现方式中,所述待查询的图流数据为待存储的图流数据,所述第一确定模块,用于:
确定待存储的图流数据的端点信息和边属性信息;
所述装置还包括存储模块,用于:
如果在所述多个候选存储位置中存在空存储位置,且所述多个候选存储位置中未存储有所述指纹,则在查询出的空存储位置中选取目标存储位置,将所述指纹和所述边属性信息存储在所述目标存储位置中;
如果在所述多个候选存储位置中已存储有所述指纹,则基于所述边属性信息,对存储有所述指纹的候选存储位置存储的边属性信息进行更新;
如果在所述多个候选存储位置中不存在空存储位置,且所述多个候选存储位置中未存储有所述指纹,则将所述指纹和所述边属性信息存储在所述缓冲区。
在一种可能的实现方式中,所述待查询的图流数据为待删除的图流数据,所述装置还包括删除模块,用于:
如果在所述多个候选存储位置中包含存储有所述指纹的目标候选存储位置,则将所述目标候选存储位置存储的图流数据删除。
在一种可能的实现方式中,所述查询模块,还用于:
如果在所述多个候选存储位置中包含存储有所述指纹的目标候选存储位置,则返回所述目标候选存储位置存储的边属性信息。
在一种可能的实现方式中,所述矩阵区包括r行r列的子矩阵区,且每个子矩阵区包括w行w列的存储位置,所述端点信息包括起始点s和终止点d,所述第二确定模块,用于:
基于公式确定起始点指纹和终止点指纹,其中,表示下取整运算,f(s)表示起始点指纹,f(d)表示终止点指纹;
基于公式h(s)=s%w和h(d)=d%w,确定起始点的初始地址和终止点的初始地址,其中,%表示取余运算,h(s)表示起始点的初始地址,h(d)表示终止点的初始地址;
基于公式确定两个长度为r的序列{qi(s)}和{qj(d)},其中,0≤i≤r,0≤j≤r且均为整数,a、c和Q为正整数;
基于公式hi(s)=(h(s)+qi(s))%w和hj(d)=(h(d)+qj(d))%w,确定两个长度为r的地址序列{hi(s)}和{hj(d)};
对于每个i和j,确定第i行、第j列的子矩阵区中的第hi(s)行、第hj(d)列的存储位置为候选存储位置。
在一种可能的实现方式中,所述端点信息包括终止点,所述第二确定模块,用于:
基于所述终止点,确定终止点指纹和多个候选存储位置;
所述查询模块,还用于:
对于每个候选存储位置,如果确定出的终止点指纹与所述候选存储位置中存储的终止点指纹相同,则将所述候选存储位置中存储的起始点指纹对应的起始点确定为所述终止点的一跳前驱。
在一种可能的实现方式中,所述矩阵区包括r行r列的子矩阵区,且每个子矩阵包括w行w列的存储位置,所述端点信息包括终止点d,所述第二确定模块,用于:
基于公式确定终止点指纹,其中,表示下取整运算,f(d)表示终止点的初始地址;
基于公式h(d)=d%w,确定终止点的初始地址,其中,%表示取余运算,h(d)表示终止点的初始地址;
基于公式确定长度为r的序列{qj(d)},其中,0≤j≤r且均为整数,a、c和Q为正整数;
基于公式hj(d)=(h(d)+qj(d))%w,确定长度为r的地址序列和{hj(d)};
对于每个j,确定第j列的每个子矩阵区中第hj(d)列的所有存储位置为候选存储位置。
在一种可能的实现方式中,所述端点信息包括起始点,所述第二确定模块,用于:
基于所述起始点,确定起始点指纹和多个候选存储位置;
所述查询模块,还用于:
对于每个候选存储位置,如果确定出的起始点指纹与所述候选存储位置中存储的起始点指纹相同,则将所述候选存储位置中存储的终止点指纹对应的终止点确定为所述起始点的一跳后继。
在一种可能的实现方式中,所述矩阵区包括r行r列的子矩阵区,且每个子矩阵包括w行w列的存储位置,所述端点信息包括起始点s,所述第二确定模块,用于:
基于公式确定起始点指纹,其中,表示下取整运算,f(s)表示起始点指纹;
基于公式h(s)=s%w,确定起始点的初始地址,其中,%表示取余运算,h(s)表示起始点的初始地址;
基于公式确定长度为r的序列{qi(s)},其中,0≤i≤r且为整数,a、c和Q为正整数;
基于公式hi(s)=(h(s)+qi(s))%w,确定长度为r的地址序列{hi(s)};
对于每个i,确定第i行的每个子矩阵区中第hi(s)行的所有存储位置为候选存储位置。
在一种可能的实现方式中,所述查询模块,用于:
通过所述多个控制端口,并行的查询对应的候选存储位置中是否存储有所述指纹。
在一种可能的实现方式中,所述查询模块,用于:
通过所述多个控制端口并行的控制对应的查询结果归并,得到多个归并后的查询结果;
将归并后的查询结果分为多组,由多个控制端口并行的控制多组查询结果的归并,再次得到归并后的查询结果,如果归并后的查询结果的数量不小于设定数量,则再次进行将归并后的查询结果分为多组的处理,直至归并后的查询结果的数量小于设定数量;
通过一个控制端口控制小于设定数量的查询结果归并,得到最终的查询结果。
在一种可能的实现方式中,所述查询模块,用于:
对于每个控制端口,通过所述控制端口流水线化查询对应的多个候选存储位置中是否存储有所述指纹。
第三方面,提供了一种FPGA,所述FPGA存储有至少一条指令,所述至少一条指令由所述FPGA加载并执行以实现如上述第一方面所述的图流数据处理的方法。
第四方面,提供了一种服务器,所述服务器包括FPGA,所述FPGA中存储有至少一条指令,所述至少一条指令由所述FPGA加载并执行以实现如上述第一方面所述的图流数据处理的方法。
本申请实施例提供的技术方案带来的有益效果至少包括:
本申请实施例提供的技术方案,通过将矩阵区划分为多个子矩阵区,并由不同的控制端口控制不同的子矩阵区中图流数据的处理。使得在进行图流数据查询处理时,由各控制端口查询所控制的子矩阵区中的存储位置的存储情况,各个控制端口的查询处理可以并发进行,充分利用了FPGA包括多个控制端口的特性,从而,提高了图流数据的查询效率,进而,也提高了后续图流数据其他处理的效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种图流数据处理的方法的流程图;
图2是本申请实施例提供的一种图流数据处理的装置的结构示意图;
图3是本申请实施例提供的一种矩阵区的示意图;
图4是本申请实施例提供的一种缓冲区的示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
本申请实施例提供的图流数据处理的方法可以由服务器实现,其中,该服务器中安装有现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA),FPGA包括FPGA板和安装在FPGA板上的双倍速率同步动态随机存储器(Double Data Rate SDRAM,DDRSDRAM),DDR SDRAM也可以简称为DDR。
本申请实施例提供的图流数据的方法,可以应用在现场可编程逻辑门阵列FPGA中。该FPGA包括多个控制端口,FPGA的存储区被配置为包括矩阵区和缓冲区,矩阵区被划分为多个子矩阵区,每个控制端口被配置为控制一个或多个子矩阵区中的图流数据的处理,且不同控制端口控制的子矩阵区不同。
矩阵区和缓冲区位于FPGA板上的DDR SDRAM中,所有的图流数据均被存储在矩阵区和缓冲区中,并且图流数据形成的动态图的结构信息也被保存在其中,从而,得以支持图流数据的各种查询。
如图4所示,矩阵区包括r行r列的子矩阵区,每个子矩阵区包括w×w个存储位置,每个存储位置可以存储有一条图流数据,且不同存储位置存储的图流数据不同。当FPGA包括n块DDR SDRAM时,这些子矩阵区可以均分在n块DDR SDRAM中,以充分利用DDR SDRAM的并行读写优势。矩阵区存储了大部分的图流数据,是图流数据的主要存储区。矩阵区也可以简称为矩阵。矩阵区存储图流数据时,存储的是图流数据的指纹和边属性信息。
缓冲区负责存储在矩阵区没有找到空存储位置的图流数据,一般存储的图流数据较少。由于FPGA中无法动态分配内存,FPGA的缓冲区包括两个固定长度的数组,一个为点表V,一个为边表E,如图3所示。点表中存储有图流数据的起始点和第一索引值,边表中存储有图流数据的终止点、边属性信息和第二索引值。每个第一索引值指向边表中的一个终止点,每个第二索引值指向边表中的一个终止点或者第二索引值为结束索引值。
如图3所示,点表中存储有起始点a,其第一索引值指向边表中的b,b的第二索引值指向边表中的d,d的第二索引值指向边表中的e,e的第二索引值指向边表中的c,c的第二索引值为结束索引值。则其构成了一条从a出发的链,该链代表多个边(边包括起始点和终止点),即(a,b)、(a,d)(a,e)(a,c)。
下面介绍下本申请实施例提供的图流数据处理的方法的应用场景,以转账为例,当A账户向B账户转账时,即生成一条新的图流数据,该图流数据发送给服务器。则服务器即可运用本申请实施例提供的方法,将图流数据进行存储。
需要说明的是,将FPGA存储区配置为包括矩阵区和缓冲区,将矩阵区划分为多个子矩阵区,将每个控制端口配置为控制一个或多个子矩阵区中的图流数据的处理,且不同控制端口控制的子矩阵区不同,是对FPGA的初始配置,也属于申请实施例提供的图流数据的处理的方法的一部分。
如图1所示,本申请实施例提供了图流数据处理的方法的处理流程可以包括如下步骤:
在步骤101中,确定待查询的图流数据的端点信息。
其中,端点信息可以只包括起始点,也可以只包括终止点,还可以即包括起始点也包括终止点。起始点和终止点均为数字。
图流数据可以只包括边,也可即包括边,也包括边属性信息。图流数据还可以只包括起始点或终止点。
在实施中,在进行图流数据的各种处理时,均需要进行图流数据的查询处理。例如,当想要对图流数据进行存储时,需要先在存储区查询是否已存储有该图流数据,此时待存储的图流数据就为待查询的图流数据,此时端点信息即包括起始点,也包括终止点。此时,在确定待查询的图流数据的端点信息的同时,还需要确定待存储的图流数据边属性信息,以便于后续的存储。在这种情况下,待存储的图流数据包括边和边属性信息。
再例如,当想要对图流数据进行删除时,需要在存储区查询到该待删除的图流数据,此时待删除的图流数据就为待查询的图流数据,此时端点信息即包括起始点,也包括终止点。在这种情况下,待删除的图流数据包括边。
再例如,当想要查询图流数据的边属性信息是,需要在存储区查询该图流数据的存储位置。在这种情况下,待查询的图流数据包括边。
再例如,当想要查询某一起始点的所有一跳后继时,则需要在存储区查询所有以该起始点作为起始点的图流数据,此时该起始点就为待查询的图流数据,此时端点信息只包括起始点。
再例如,当想要查询某一终止点的所有一跳前驱时,需要在存储区查询所有以该终止点作为终止点的图流数据,此时该终止点就位待查询的图流数据,此时端点信息只包括终止点。
当进行一跳前驱或一跳后继查询时,待查询的图流数据只包括终止点或起始点。
需要说明的是,在本申请中的端点信息均为数字。当图流数据中的端点信息原本不以数字表示时,可以对其进行编码或者哈希映射转换为数字。起始点s的一跳后继,可以理解为所有以s为起始点的图流数据的边的终止点,以转账场景为例,s的一跳后继可以理解为s都向哪个用户转了账。终止点d的一跳前驱,可以理解为所有以d为终止点的图流数据的边的起始点,以转账场景为例,d的一跳前驱可以理解为所有向d转账的用户。
在步骤102中,基于端点信息,确定指纹和多个候选存储位置。
其中,该指纹可以只包括起始点的指纹,也可以只包括终止点的指纹,还可以即包括起始点的指纹,也包括终止点的指纹。
在实施中,根据查询的目的不同,确定的指纹以及多个候选存储位置的方式也不同。下面根据查询的具体目的不同,对确定指纹和候选存储位置的过程进行详细论述。需要说明的是,在下文叙述中,以矩阵区包括r行r列的子矩阵区,且每个子矩阵区包括w行w列的存储位置,起始点为s,终止点为d为例,进行叙述。
在一种可能的实现方式中,如果查询矩阵区是否存储有待查询的图流数据的目的是删除该图流数据、更新该图流数据、存储该图流数据和获取该图流数据的属性信息,则步骤102相应的处理过程可以如下所述:
基于公式确定起始点指纹和终止点指纹。
基于公式h(s)=s%w和h(d)=d%w,确定起始点的初始地址和终止点的初始地址。
基于公式确定两个长度为r的序列{qi(s)}和{qj(d)}。
基于公式hi(s)=(h(s)+qi(s))%w和hj(d)=(h(d)+qj(d))%w,确定两个长度为r的地址序列{hi(s)}和{hj(d)}。
对于每个i和j,确定第i行、第j列的子矩阵区中的第hi(s)行、第hj(d)列的存储位置为候选存储位置。
其中,表示下取整运算,f(s)表示起始点指纹,f(d)表示终止点指纹;%表示取余运算,h(s)表示起始点的初始地址,h(d)表示终止点的初始地址;0≤i≤r,0≤j≤r且均为整数,a、c和Q为正整数。
在实施中,对于每条图流数据,将其边的起始点s和终止点d都分为指纹和初始地址两部分,h(s)=s%w,h(d)=d%w为两个初始地址,为两个指纹。
之后我们使用线性同余法计算出两个长度为r的序列{qi(s)}和{qj(d)},公式为,
其中a、c和Q为正整数,且满足以下条件:(1)c和Q互质,(2)Q的所有质因子的乘积可以整除a-1,(3)若Q是4的倍数,则a-1也是。另外,Q大于a、c,f(s)和f(d)时可以使得产生的随机序列周期最大化,但是由于产生的序列长度不会超过20,所以不需要严格满足该要求。在进行在两个序列的计算时,各个qi(s)和qj(d)的计算,可以并行进行。
最后,我们计算两个地址序列{hi(s)=(h(s)+qi(s))%w|0≤i≤r-1}和{hj(d)=(h(d)+qj(d))%w|0≤j≤r-1}。我们将该图流数据映射到矩阵区的r行r列的候选存储位置上,每个子矩阵区一个。确定第i行、第j列的子矩阵区中的第hi(s)行、第hj(d)列的存储位置为候选存储位置,也即在第i行第j列的子矩阵区里映射的存储位置位于该子矩阵区的第hi(s)行hj(d)列中。
在一种可能的实现方式中,如果待查询的图流数据只包括终止点,查询的目的是查询该终止点的所有一跳前驱,则步骤102相应的处理过程可以如下所述:
基于公式确定终止点指纹;
基于公式h(d)=d%w,确定终止点的初始地址;
基于公式确定长度为r的序列{qj(d)};
基于公式hj(d)=(h(d)+qj(d))%w,确定长度为r的地址序列和{hj(d)};
对于每个j,确定第j列的每个子矩阵区中第hj(d)列的所有存储位置为候选存储位置。
其中,表示下取整运算,f(d)表示终止点的初始地址;%表示取余运算,h(d)表示终止点的初始地址;0≤j≤r且均为整数,a、c和Q为正整数。
在实施中,计算序列{hj(d)}的过程与上文相同,在此不在赘述。
由于不包含起始点,所以对于第j列的每个子矩阵区,需要确定第hj(d)列所有行的存储位置为候选存储位置。也即每个子矩阵区映射了w个存储位置,矩阵区共确定出了r×r×w个候选存储位置。
在一种可能的实现方式中,如果待查询的图流数据只包括起始点,查询的目的是查询该起始点的所有一跳后继,则步骤102相应的处理过程可以如下所述:
基于公式确定起始点指纹。
基于公式h(s)=s%w,确定起始点的初始地址;
基于公式确定长度为r的序列{qi(s)};
基于公式hi(s)=(h(s)+qi(s))%w,确定长度为r的地址序列{hi(s)};
对于每个i,确定第i行的每个子矩阵区中第hi(s)行的所有存储位置为候选存储位置。
其中,表示下取整运算,f(s)表示起始点指纹;%表示取余运算,h(s)表示起始点的初始地址;0≤i≤r且为整数,a、c和Q为正整数。
在实施中,计算序列{hi(s)}的过程与上文相同,在此不在赘述。
由于不包含终止点,所以对于第i行的每个子矩阵区,需要确定第hi(s)行所有列的存储位置为候选存储位置。也即每个子矩阵区映射了w个存储位置,矩阵区共确定出了r×r×w个候选存储位置。
需要说明的是,上文中的行和列仅是为了方便论述,两者可以完全互换,即可以改为基于起始点确定列,基于终止点确定行。
在步骤103中,通过每个控制端口,查询对应的候选存储位置中是否存储有该指纹。
其中,该对应的候选存储位置位于该控制端口控制的子矩阵区中。
在实施中,如图4所示,在控制端口查询对应的候选存储位置中是否存储有该指纹时,可以通过多个控制端口,并行的查询对应的候选存储位置中是否存储有该指纹。从而,提高了图流数据的查询效率。
例如,FPGA板上安装有n块DDR SDRAM,每一块DDR上有k个控制端口,那么对确定出的多个候选存储位置的查询可以分为n×k组并行进行,每组使用一个控制端口。
在一种可能的实现方式中,如图4所示,对于每个控制端口,在查询对应的候选存储位置中是否存储有该指纹时,可以通过控制端口流水线化查询对应的多个候选存储位置中是否存储有该指纹。其中,流水线化查询是指在查询一个存储位置的同时,也进行下一存储位置的计算和读取。因此,可以理解的是,在本申请中步骤102和步骤103可以同时进行,即在同一时间,即进行候选存储位置的确定处理,也进行候选存储位置的查询处理。通过流水线化查询,提高了图流数据的查询效率。流水线优化时,可以将流水线的间隔缩小为一个时钟周期。
在查询时,每个控制端口查询一个存储位置即可得到一个查询结果,因此,需要对得到的多个查询结果进行归并。
在一种可能的实现方式中,在对查询结果进行归并时,可以先通过每个控制端口控制对应的查询结果归并,得到多个归并后的查询结果,在这一过程中多个控制端口的查询结果的归并是并行的。然后,将归并后的查询结果分为多组,由一个控制端口控制一组查询结果的归并,再次得到归并后的查询结果,在这一过程中,多个控制端口的查询结果的归并也是并行的。如果归并后的查询结果的数量不小于设定数量,则再次进行将归并后的查询结果分为多组的处理,直至归并后的查询结果的数量小于设定数量。最后,通过一个控制端口控制小于设定数量的查询结果归并,得到最终的查询结果。
其中,设定数量可以为3。
在实施中,根据查询的目的不同,查询结果归并的过程也不同。下面以查询矩阵区是否存储有待查询的图流数据的目的是更新该图流数据或存储该图流数据为例,对查询归并的具体过程进行论述:
对于每个控制端口,如果该控制端口查询到有候选存储位置存储有目标指纹,则该组的归并结果为存储有目标指纹的目标存储位置。否则,归并结果可以为第一个查询到的空存储位置。
对归并后的n×k(n×k为控制端口的数量)个查询结果进行分组,由一个控制端口控制一组查询结果的归并,直至归并后的查询结果的数量小于设定数量。最后,通过一个控制端口控制小于设定数量的查询结果归并,得到最终的查询结果。归并的原理为:对于每一组查询结果,如果查询结果中存在目标存储位置,则归并后的查询结果为该目标存储位置;如果查询结果均为空存储位置,则归并后的查询结果为最早查询到的空存储位置。
如果该查询结果为目标存储位置,则说明目标指纹对应的图流数据已存储在矩阵区。如果该查询结果为空存储位置,则说明目标指纹对应的图流数据未存储在矩阵区,则后续可以将目标指纹存储在该空存储位置。如果该查询结果即没有目标存储位置,也没有空存储位置,说明目标指纹对应的图流数据未存储在矩阵区,且该图流数据对应的候选存储位置已经存满,该图流数据后续应当存储在缓冲区。
对于其他查询目的的查询结果的归并,与上述过程类似,不同的是归并的原理不同。
在一种可能的实现方式中,如果查询矩阵区是否存储有待查询的图流数据的目的是存储该图流数据,也即待查询的图流数据为待存储的图流数据时,则后续相应的处理过程可以如下所述:
如果在多个候选存储位置中存在空存储位置,且多个候选存储位置中未存储有该指纹,则在查询出的空存储位置中选取目标存储位置,将该指纹和边属性信息存储在目标存储位置中。
如果在多个候选存储位置中已存储有该指纹,则基于边属性信息,对存储有该指纹的候选存储位置存储的边属性信息进行更新。
如果在多个候选存储位置中不存在空存储位置,且多个候选存储位置中未存储有该指纹,则将该指纹和边属性信息存储在缓冲区。
其中,该指纹为指纹对,即终止点指纹和起始点指纹的组合。
在实施中,在查询出的空存储位置中选取目标存储位置时,目标存储位置可以是查询出的第一个空存储位置。
基于边属性信息,对存储有该指纹的候选存储位置存储的边属性信息进行更新,可以是使用新的确定出的边属性信息,对已存储的边属性信息进行替换。
当需要将指纹和边属性信息存储在缓冲区时,需要先查询缓冲区是否已存储有该指纹,具体的处理过程可以如下所述:
在缓冲区的点表中查询待存储的图流数据的起始点s,如果在点表中不存在起始点s,说明缓冲区未存储有该待存储的图流数据,则在点表中存储起始点s以及目标第一索引值,并在边表中目标第一索引值指向的位置,存储待存储的图流数据的终止点和边属性信息以及结束索引值。
如果在点表中存在起始点s,则根据起始点s对应的第一索引值,在边表中查询候选终止点。
对于每个候选终止点,如果该候选终止点不为终止点d,则根据该候选终止点对应的第二索引值,查询下一候选终止点,直至查询到终止点d,或者,候选终止点不为d,但该候选终止点对应的第二索引值为结束索引值。
如果查询到终止点d,则可以基于待存储的图流数据的边属性信息,对已存储的边属性进行更新。如果查询到候选终止点不为d,但该候选终止点对应的第二索引值为结束索引值,则说明缓冲区中未存储有待存储的图流数据,则将结束索引值修改,使其指向边表中的某个空存储位置,并在该空存储位置存储终止点d、边属性信息和结束索引值。
通过上述存储,虽然在边表中的终止点可能存储在边表中不连续的位置,但是通过第一索引值和第二索引值将他们连成了一条链,此链以点表中的某个点为起始点,通过该起始点的第一索引值,指向边表中的某一终止点,并通过该终止点的第二索引值,进一步延伸到下一终止点,此链持续延伸到链中终止点的第二索引值为结束索引值为止。
在一种可能的实现方式中,如果查询矩阵区是否存储有待查询的图流数据的目的是删除该图流数据,也即待查询的图流数据为待删除的图流数据,相应的处理过程可以如下所述,如果在多个候选存储位置中包含存储有该指纹的目标候选存储位置,则将目标候选存储位置存储的图流数据删除。
其中,该指纹为指纹对,即终止点指纹和起始点指纹的组合。
在实施中,当在矩阵区查询不到待删除的图流数据时,需要在缓冲区查询是否存储有待删除的图流数据,具体的处理过程可以如下所述:
在缓冲区的点表中查询待存储的图流数据的起始点s,如果在点表中不存在起始点s,说明缓冲区未存储有该待删除的图流数据,则停止查询处理,并可以返回未查询到的结果。
如果在点表中存在起始点s,则根据起始点s对应的第一索引值,在边表中查询候选终止点。
对于每个候选终止点,如果该候选终止点不为终止点d,则根据该候选终止点对应的第二索引值,查询下一候选终止点,直至查询到终止点d,或者,候选终止点不为d,但该候选终止点对应的第二索引值为结束索引值。
如果查询到候选终止点不为d,但该候选终止点对应的第二索引值为结束索引值,则说明缓冲区中未存储有待删除的图流数据。
如果查询到终止点d,则可以在边表中将d和其对应的边属性信息删除。并修改边表中与之有关的第二索引值,以防从起始点出发的链断开。如果删除终止点d之后,其起始点不再有其余终止点,则将该起始点在点表中也删除。可以理解的是,由于删除会导致边表和点表中存在空洞,需要定期整理以回收空间。
在一种可能的实现方式中,如果查询矩阵区是否存储有待查询的图流数据的目的是获取该图流数据的边属性信息,则相应的处理过程可以如下所述,如果在多个候选存储位置中包含存储有该指纹的目标候选存储位置,则返回目标候选存储位置存储的边属性信息。
在实施中,如果在矩阵区未查询到待查询的图流数据,则还需要在缓冲区查询,具体的处理过程可以如下所述:
在缓冲区的点表中查询待查询的图流数据的起始点s,如果点表中未存储有s,则说明在缓冲区未存储有待查询的图流数据。可以返回未查询到的结果。
如果点表中存储有起始点s,则根据该起始点s对应的第一索引值,在边表中查询候选终止点。根据每个候选终止点对应的第二索引值,查询下一候选终止点,直至查询到终止点d,或者,查询到候选终止点不为d,但候选终止点的第二索引值为结束索引值。前一种情况,则需要返回终止点的边属性信息。后一种情况,则说明缓存区不存在该待查询的图流数据,则可以返回未查询到的结果。
在一种可能的实现方式中,如果待查询的图流数据的边的端点信息包括终止点,查询的目的是查询该终止点的所有一跳前驱,则相应的处理过程可以如下所述,对于每个候选存储位置,如果确定出的终止点指纹与该候选存储位置中存储的终止点指纹相同,则将该候选存储位置中存储的起始点指纹对应的起始点确定为该终止点的一跳前驱。
在实施中,在查找到存储有该终止点指纹的候选存储位置之后,将该候选存储位置中存储的起始点指纹取出,并根据该候选存储位置的地址和该起始点指纹,将该起始点指纹还原为起始点。
例如,取出的起始点指纹为f(s),该候选存储位置位于第3行、第4列的子矩阵区的第Ci行,第hj(d)列。则先根据f(s)计算出序列{qi(s)},然后取出第3项q3(s),之后根据Ci=(h(s)+q3(s))%w解出h(s)。最后,根据s=f(s)×w+h(s),计算出起始点s。
另外,还需在缓冲区查询该终止点的一跳前驱(为了便于叙述,将该终止点称为终止点d),具体的处理过程可以如下所述:
对于点表中的每一个点,根据该点对应的第一索引值,在边表中查询出一个终止点。根据每个终止点对应的第二索引值,查询下一终止点,直至查询到的终止点对应的第二索引值为结束索引值。将与终止点d相同的所有查询出的终止点对应的起始点,确定为终止点d的一跳前驱。也即,按照第一索引值和第二索引值,访问点表中的所有点发出的边,并在某一条边的终止点为d时,将该边的起始点确定为终止点d的一跳前驱。
在一种可能的实现方式中,如果待查询的图流数据的边的端点信息包括起始点,查询的目的是查询该起始点的所有一跳后继,则相应的处理过程可以如下所述,对于每个候选存储位置,如果确定出的起始点指纹与该候选存储位置中存储的起始点指纹相同,则将该候选存储位置中存储的终止点指纹对应的终止点确定为该起始点的一跳后继。
在实施中,在查找到存储有该起始点指纹的候选存储位置之后,将该候选存储位置中存储的终止点指纹取出,并根据该候选存储位置的地址和该终止点指纹,将该终止点指纹还原为终止点。
例如,取出的终止点指纹为f(d),该候选存储位置位于第3行、第4列的子矩阵区的第hi(s)行,第Cj列。则先根据f(d)计算出序列{qj(d)},然后取出第4项q4(d),之后根据Cj=(h(d)+q4(d))%w解出h(d)。最后,根据d=f(d)×w+h(d),计算出终止点d。
另外,还需要在缓冲区查询该起始点的一跳后继,具体的处理过程可以如下所述:
在缓冲区的点表中查询该起始点s,如果点表中未存储有该起始点s,则说明在缓冲区不存在起始点s的一跳后继。
如果点表中存储有该起始点s,则根据该起始点s对应的第一索引值,在边表中查询候选终止点。根据每个候选终止点对应的第二索引值,查询下一候选终止点,直至查询到的候选终止点对应的第二索引值为结束索引值。也即,按照第一索引值和第二索引值,访问所有该起始点发出的边,并确定这些边的终止点。
将所有候选终止点确定为起始点s的一跳后继。
下面以一个具体的实例对本申请实施例提供的方法进行详细说明,在该实例中,FPGA的FPGA板上安装有4块DDR SDRAM,每块DDR SDRAM包括3个端口,矩阵区划分为分为12行12列的144个子矩阵区,每个子矩阵区包括5000×5000个存储位置,每个存储位置用于存储两个4byte的指纹和一个4byte的边属性信息。每一个子矩阵的存储空间为0.3G byte。每块DDR SDRAM上分配36个子矩阵。缓冲区的存储空间为4G byte,包含点表和边表。
更新操作或存储操作
在对图流数据进行更新或存储时,可以进行批量操作,可以每次积累多条(例如100条)图流数据后,一次传入FPGA。
对于每条图流数据的边(s,d)和边属性信息,将其起始点s和终止点d都分为指纹和初始地址两部分,h(s)=s%5000,h(d)=d%5000为两个初始地址,为两个指纹。使用线性同余法计算出两个长度为12的序列{qi(s)}和{qj(d)},公式为,另一个序列{qj(d)}同理。
其中a、c和Q分别为5,739,1048576,每组序列中14个值的计算可以并行进行,其中用到的正整数如ai可以提前计算好存储起来以降低延迟。
最后,计算两个地址序列{hi(s)=(h(s)+qi(s))%5000|0≤i≤11}和{hj(d)=(h(d)+qj(d))%5000|0≤j≤11},两个地址序列对应144个存储位置,{(hi(s),hj(d))|0≤i≤11,0≤j≤11},并将这144个地址存储下来。到此为止的过程可以将100条图流数据的处理并行进行。
之后我们要逐条边操作,按照计算出的存储位置进行检查和更新。每当处理一条图流数据时,我们取出计算好的144个存储位置,每个存储位置对应一个子矩阵区里的一个存储位置。在第i行、第j列的子矩阵区里,存储位置在子矩阵区的第hi(s)行hj(d)列中。之后我们分为12组检查这144个位置,每个DDR上3组,每组使用一个控制端口读取。每组的12个位置的读取和查询使用流水线优化。每组12个位置中选择一个位置的存储位置(x,y)报告,优先选择存有指纹对(f(s),f(d))的位置,并增加tag为1,若无法找到,则报告第一个空位置,并标记上tag为0。若都无法找到,则返回结果(-1,1)。之后我们合并这12组结果,使用两次归并来进行。第一次为4组3路归并,每一组中合并3个存储位置,4组之间并行进行。之后我们再使用一次4路归并合并第一轮产生的4个结果。在每一组归并中,我们顺序检查此组的所有存储位置,同样优先报告tag为1的地址,如果没有,则报告其中他第一个tag为0的地址,如果此组存储位置全部为(-1,1),则也报告(-1,1)。
最后,我们检查归并产生的地址,若tag为1,则说明之前图流数据插入过,我们根据新的边属性信息修改这个存储位置的边属性信息并结束更新。如果tag为0,我们在此地址插入指纹对((f(s),f(d)),并记录其边属性信息。如果最终存储位置为(-1,1),那么我们在缓冲区中寻找(s,d),如果找到,则修改其边属性信息,如果没有找到,则插入此边。
图流数据查询和删除操作
当查询或删除图流数据时,我们使用与更新中同样的方法找到144个存储位置,并用更新操作中所述的方法并行检查这些存储位置,如果找到了一个存储位置存有指纹对((f(s),f(d)),我们返回这个存储位置的边属性信息(图流数据查询操作时)或者清空这个存储位置(图流数据删除操作时)。如果在矩阵区中没有找到这样的位置,那么我们在缓冲区中寻找边(s,d),如果找到,则返回其边属性信息或者将其删除,如果没有找到,则报告未找到。
一跳后继查询操作
对于一个查询点v,我们首先用上文所述的方法计算其地址序列{hi(v)},之后我们分12组检查矩阵的12行12列的子矩阵区,每组为12行子矩阵区中的1行,使用一个控制端口,不同组之间并行进行。在第i行的子矩阵区里,我们检查子矩阵的第hi(v)行的所有位置,对这5000×12个存储位置的读取和检查可以使用流水线优化,并将流水线间隔控制在一个时钟周期。若其中第i行第j列的子矩阵区中,我们在子矩阵区的第hi(v)行第Cj列的位置发现了形如((f(s),f(d))的指纹对,则此处为v发出的一条边,我们使用f(d)计算出序列{qj(d)},取出第j项qj(d),之后根据(h(d)+qj(d))%w=Cj解出h(d),之后我们计算出终止点d=f(d)×w+h(d),并将其加入结果集合。查询结果写在DDR上的12个60k大小的数组中,每组子矩阵区的查询结果顺序写入其中一个数组。最后我们再在DDR上占用一块约1G大小的空间,并查询缓冲区,将缓冲区中找到的所有v的一跳后继写入此块空间中。
一跳前驱查询操作
一跳前驱查询和一跳后继查询相似,只是将行转换为列即可,并行和流水线化的方法也一样,在此不再赘述。
基于相同的技术构思,本申请实施例还提供了一种图流数据处理的装置,该装置应用于现场可编程逻辑门阵列FPGA中,FPGA包括多个控制端口,FPGA的存储区被配置为包括矩阵区和缓冲区,矩阵区被划分为多个子矩阵区,每个控制端口被配置为控制一个或多个子矩阵区中的图流数据的处理,且不同控制端口控制的子矩阵区不同,该装置包括:
第一确定模块201,用于确定待查询的图流数据的端点信息;
第二确定模块202,用于基于端点信息,确定指纹和多个候选存储位置;
查询模块203,用于通过每个控制端口,查询对应的候选存储位置中是否存储有指纹,其中,对应的候选存储位置位于该控制端口控制的子矩阵区中。
在一种可能的实现方式中,待查询的图流数据为待存储的图流数据,第一确定模块201,用于:
确定待存储的图流数据的端点信息和边属性信息;
装置还包括存储模块,用于:
如果在多个候选存储位置中存在空存储位置,且多个候选存储位置中未存储有指纹,则在查询出的空存储位置中选取目标存储位置,将指纹和边属性信息存储在目标存储位置中;
如果在多个候选存储位置中已存储有指纹,则基于边属性信息,对存储有指纹的候选存储位置存储的边属性信息进行更新;
如果在多个候选存储位置中不存在空存储位置,且多个候选存储位置中未存储有指纹,则将指纹和边属性信息存储在缓冲区。
在一种可能的实现方式中,待查询的图流数据为待删除的图流数据,装置还包括删除模块,用于:
如果在多个候选存储位置中包含存储有指纹的目标候选存储位置,则将目标候选存储位置存储的图流数据删除。
在一种可能的实现方式中,查询模块203,还用于:
如果在多个候选存储位置中包含存储有该指纹的目标候选存储位置,则返回目标候选存储位置存储的边属性信息。
在一种可能的实现方式中,矩阵区包括r行r列的子矩阵区,且每个子矩阵区包括w行w列的存储位置,端点信息包括起始点s和终止点d,第二确定模块202,用于:
基于公式确定起始点指纹和终止点指纹,其中,表示下取整运算,f(s)表示起始点指纹,f(d)表示终止点指纹;
基于公式h(s)=s%w和h(d)=d%w,确定起始点的初始地址和终止点的初始地址,其中,%表示取余运算,h(s)表示起始点的初始地址,h(d)表示终止点的初始地址;
基于公式确定两个长度为r的序列{qi(s)}和{qj(d)},其中,0≤i≤r,0≤j≤r且均为整数,a、c和Q为正整数;
基于公式hi(s)=(h(s)+qi(s))%w和hj(d)=(h(d)+qj(d))%w,确定两个长度为r的地址序列{hi(s)}和{hj(d)};
对于每个i和j,确定第i行、第j列的子矩阵区中的第hi(s)行、第hj(d)列的存储位置为候选存储位置。
在一种可能的实现方式中,端点信息包括终止点,第二确定模块202,用于:
基于终止点,确定终止点指纹和多个候选存储位置;
查询模块203,还用于:
对于每个候选存储位置,如果确定出的终止点指纹与该候选存储位置中存储的终止点指纹相同,则将该候选存储位置中存储的起始点指纹对应的起始点确定为该终止点的一跳前驱。
在一种可能的实现方式中,矩阵区包括r行r列的子矩阵区,且每个子矩阵包括w行w列的存储位置,端点信息包括终止点d,第二确定模块202,用于:
基于公式确定终止点指纹,其中,表示下取整运算,f(d)表示终止点的初始地址;
基于公式h(d)=d%w,确定终止点的初始地址,其中,%表示取余运算,h(d)表示终止点的初始地址;
基于公式确定长度为r的序列{qj(d)},其中,0≤j≤r且均为整数,a、c和Q为正整数;
基于公式hj(d)=(h(d)+qj(d))%w,确定长度为r的地址序列和{hj(d)};
对于每个j,确定第j列的每个子矩阵区中第hj(d)列的所有存储位置为候选存储位置。
在一种可能的实现方式中,端点信息包括起始点,第二确定模块202,用于:
基于该起始点,确定起始点指纹和多个候选存储位置;
查询模块203,还用于:
对于每个候选存储位置,如果确定出的起始点指纹与该候选存储位置中存储的起始点指纹相同,则将该候选存储位置中存储的终止点指纹对应的终止点确定为起始点的一跳后继。
在一种可能的实现方式中,矩阵区包括r行r列的子矩阵区,且每个子矩阵包括w行w列的存储位置,端点信息包括起始点s,第二确定模块202,用于:
基于公式确定起始点指纹,其中,表示下取整运算,f(s)表示起始点指纹;
基于公式h(s)=s%w,确定起始点的初始地址,其中,%表示取余运算,h(s)表示起始点的初始地址;
基于公式确定长度为r的序列{qi(s)},其中,0≤i≤r且为整数,a、c和Q为正整数;
基于公式hi(s)=(h(s)+qi(s))%w,确定长度为r的地址序列{hi(s)};
对于每个i,确定第i行的每个子矩阵区中第hi(s)行的所有存储位置为候选存储位置。
在一种可能的实现方式中,查询模块203,用于:
通过多个控制端口,并行的查询对应的候选存储位置中是否存储有该指纹。
在一种可能的实现方式中,查询模块203,用于:
通过所述多个控制端口并行的控制对应的查询结果归并,得到多个归并后的查询结果;
将归并后的查询结果分为多组,由多个控制端口并行的控制多组查询结果的归并,再次得到归并后的查询结果,如果归并后的查询结果的数量不小于设定数量,则再次进行将归并后的查询结果分为多组的处理,直至归并后的查询结果的数量小于设定数量;
通过一个控制端口控制小于设定数量的查询结果归并,得到最终的查询结果。
在一种可能的实现方式中,查询模块203,用于:
对于每个控制端口,通过该控制端口流水线化查询对应的多个候选存储位置中是否存储有该指纹。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
需要说明的是:上述实施例提供的图流数据处理的装置在进行图流数据处理时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的图流数据处理的装置与图流数据处理的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (11)

1.一种图流数据处理的方法,其特征在于,所述方法应用于现场可编程逻辑门阵列FPGA中,所述FPGA包括多个控制端口,所述FPGA的存储区被配置为包括矩阵区和缓冲区,所述矩阵区包括r行r列的子矩阵区,且每个子矩阵区包括w行w列的存储位置,每个控制端口被配置为控制一个或多个子矩阵区中的图流数据的处理,且不同控制端口控制的子矩阵区不同,所述方法包括:
确定待查询的图流数据的端点信息;
基于所述待查询的图流数据的端点信息,确定所述待查询的图流数据的指纹和所述待查询的图流数据的多个候选存储位置,其中,所述多个候选存储位置是从所述r行r列的子矩阵区包括的存储位置中选取的;
通过每个控制端口,查询所述控制端口对应的候选存储位置中是否存储有所述指纹,其中,所述控制端口对应的候选存储位置位于所述控制端口控制的子矩阵区中,所述多个控制端口并行的查询对应的候选存储位置中是否存储有所述指纹。
2.根据权利要求1所述的方法,其特征在于,所述待查询的图流数据为待存储的图流数据,所述确定待查询的图流数据的端点信息,包括:
确定待存储的图流数据的端点信息和边属性信息;
所述通过每个控制端口,查询所述控制端口对应的候选存储位置中是否存储有所述指纹之后,所述方法还包括:
如果在所述多个候选存储位置中存在空存储位置,且所述多个候选存储位置中未存储有所述指纹,则在查询出的空存储位置中选取目标存储位置,将所述指纹和所述边属性信息存储在所述目标存储位置中;
如果在所述多个候选存储位置中已存储有所述指纹,则基于所述边属性信息,对存储有所述指纹的候选存储位置存储的边属性信息进行更新;
如果在所述多个候选存储位置中不存在空存储位置,且所述多个候选存储位置中未存储有所述指纹,则将所述指纹和所述边属性信息存储在所述缓冲区。
3.根据权利要求1所述的方法,其特征在于,所述待查询的图流数据为待删除的图流数据,所述通过每个控制端口,查询所述控制端口对应的候选存储位置中是否存储有所述指纹之后,还包括:
如果在所述多个候选存储位置中包含存储有所述指纹的目标候选存储位置,则将所述目标候选存储位置存储的图流数据删除。
4.根据权利要求1所述的方法,其特征在于,所述通过每个控制端口,查询所述控制端口对应的候选存储位置中是否存储有所述指纹之后,还包括:
如果在所述多个候选存储位置中包含存储有所述指纹的目标候选存储位置,则返回所述目标候选存储位置存储的边属性信息。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述端点信息包括起始点s和终止点d,所述基于所述待查询的图流数据的端点信息,确定所述待查询的图流数据的指纹和所述待查询的图流数据的多个候选存储位置,包括:
基于公式确定所述待查询的图流数据的起始点指纹和终止点指纹,其中,表示下取整运算,f(s)表示起始点指纹,f(d)表示终止点指纹;
基于公式h(s)=s%w和h(d)=d%w,确定起始点的初始地址和终止点的初始地址,其中,%表示取余运算,h(s)表示起始点的初始地址,h(d)表示终止点的初始地址;
基于公式确定两个长度为r的序列{qi(s)}和{qj(d)},其中,0≤i≤r,0≤j≤r且均为整数,a、c和Q为正整数;
基于公式hi(s)=(h(s)+qi(s))%w和hj(d)=(h(d)+qj(d))%w,确定两个长度为r的地址序列{hi(s)}和{hj(d)};
对于每个i和j,确定第i行、第j列的子矩阵区中的第hi(s)行、第hj(d)列的存储位置为候选存储位置。
6.根据权利要求1所述的方法,其特征在于,所述端点信息包括终止点,所述基于所述待查询的图流数据的端点信息,确定所述待查询的图流数据的指纹和所述待查询的图流数据的多个候选存储位置,包括:
基于所述终止点,确定终止点指纹和多个候选存储位置;
所述通过每个控制端口,查询所述控制端口对应的候选存储位置中是否存储有所述指纹之后,还包括:
对于每个候选存储位置,如果确定出的终止点指纹与所述候选存储位置中存储的终止点指纹相同,则将所述候选存储位置中存储的起始点指纹对应的起始点确定为所述终止点的一跳前驱。
7.根据权利要求6所述的方法,其特征在于,所述端点信息包括终止点d,所述基于所述终止点,确定终止点指纹和多个候选存储位置,包括:
基于公式确定终止点指纹,其中,表示下取整运算,f(d)表示终止点的初始地址;
基于公式h(d)=d%w,确定终止点的初始地址,其中,%表示取余运算,h(d)表示终止点的初始地址;
基于公式确定长度为r的序列{qj(d)},其中,0≤j≤r且均为整数,a、c和Q为正整数;
基于公式hj(d)=(h(d)+qj(d))%w,确定长度为r的地址序列和{hj(d)};
对于每个j,确定第j列的每个子矩阵区中第hj(d)列的所有存储位置为候选存储位置。
8.根据权利要求1所述的方法,其特征在于,所述端点信息包括起始点,所述基于所述待查询的图流数据的端点信息,确定所述待查询的图流数据的指纹和所述待查询的图流数据的多个候选存储位置,包括:
基于所述起始点,确定起始点指纹和多个候选存储位置;
所述通过每个控制端口,查询所述控制端口对应的候选存储位置中是否存储有所述指纹之后,还包括:
对于每个候选存储位置,如果确定出的起始点指纹与所述候选存储位置中存储的起始点指纹相同,则将所述候选存储位置中存储的终止点指纹对应的终止点确定为所述起始点的一跳后继。
9.根据权利要求8所述的方法,其特征在于,所述端点信息包括起始点s,所述基于所述起始点,确定起始点指纹和多个候选存储位置,包括:
基于公式确定起始点指纹,其中,表示下取整运算,f(s)表示起始点指纹;
基于公式h(s)=s%w,确定起始点的初始地址,其中,%表示取余运算,h(s)表示起始点的初始地址;
基于公式确定长度为r的序列{qi(s)},其中,0≤i≤r且为整数,a、c和Q为正整数;
基于公式hi(s)=(h(s)+qi(s))%w,确定长度为r的地址序列{hi(s)};
对于每个i,确定第i行的每个子矩阵区中第hi(s)行的所有存储位置为候选存储位置。
10.根据权利要求1所述的方法,其特征在于,所述通过每个控制端口,查询所述控制端口对应的候选存储位置中是否存储有所述指纹,包括:
通过所述多个控制端口并行的控制对应的查询结果归并,得到多个归并后的查询结果;
将归并后的查询结果分为多组,由多个控制端口并行的控制多组查询结果的归并,再次得到归并后的查询结果,如果归并后的查询结果的数量不小于设定数量,则再次进行将归并后的查询结果分为多组的处理,直至归并后的查询结果的数量小于设定数量;
通过一个控制端口控制小于设定数量的查询结果归并,得到最终的查询结果。
11.根据权利要求1所述的方法,其特征在于,所述通过每个控制端口,查询所述控制端口对应的候选存储位置中是否存储有所述指纹,包括:
对于每个控制端口,通过所述控制端口流水线化查询对应的多个候选存储位置中是否存储有所述指纹。
CN201911114115.2A 2019-11-14 2019-11-14 图流数据处理的方法 Active CN112800288B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911114115.2A CN112800288B (zh) 2019-11-14 2019-11-14 图流数据处理的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911114115.2A CN112800288B (zh) 2019-11-14 2019-11-14 图流数据处理的方法

Publications (2)

Publication Number Publication Date
CN112800288A CN112800288A (zh) 2021-05-14
CN112800288B true CN112800288B (zh) 2024-08-09

Family

ID=75803785

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911114115.2A Active CN112800288B (zh) 2019-11-14 2019-11-14 图流数据处理的方法

Country Status (1)

Country Link
CN (1) CN112800288B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102254012A (zh) * 2011-07-19 2011-11-23 北京大学 一种基于外存的图数据存储方法及子图查询方法
CN103927362A (zh) * 2014-04-18 2014-07-16 山东泰华电讯有限责任公司 基于gis平台的城市管线探测数据快速成图方法及系统

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7046827B2 (en) * 2002-02-15 2006-05-16 International Business Machines Corporation Adapting point geometry for storing address density
US10482586B2 (en) * 2015-05-18 2019-11-19 Nokia Technologies Oy Filtering depth map image
CN106126481B (zh) * 2016-06-29 2019-04-12 华为技术有限公司 一种计算系统和电子设备
US10963512B2 (en) * 2017-01-20 2021-03-30 Amazon Technologies, Inc. Query language interoperability in a graph database
CN108121788B (zh) * 2017-12-19 2020-08-07 北京大学 子图查询方法
CN108671541B (zh) * 2018-04-27 2021-09-28 腾讯科技(深圳)有限公司 一种数据存储方法和装置以及存储介质

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102254012A (zh) * 2011-07-19 2011-11-23 北京大学 一种基于外存的图数据存储方法及子图查询方法
CN103927362A (zh) * 2014-04-18 2014-07-16 山东泰华电讯有限责任公司 基于gis平台的城市管线探测数据快速成图方法及系统

Also Published As

Publication number Publication date
CN112800288A (zh) 2021-05-14

Similar Documents

Publication Publication Date Title
CN105975587B (zh) 一种高性能的内存数据库索引组织与访问方法
CN107423422B (zh) 基于网格的空间数据分布式存储及检索方法和系统
US10642831B2 (en) Static data caching for queries with a clause that requires multiple iterations to execute
US10198363B2 (en) Reducing data I/O using in-memory data structures
CN104850572B (zh) HBase非主键索引构建与查询方法及其系统
US7085769B1 (en) Method and apparatus for performing hash join
EP3401807B1 (en) Synopsis based advanced partition elimination
US8364751B2 (en) Automated client/server operation partitioning
CN108009008A (zh) 数据处理方法和系统、电子设备
CN103942289A (zh) 一种Hadoop上面向范围查询的内存缓存方法
CN105117417A (zh) 一种读优化的内存数据库Trie树索引方法
CN103914483B (zh) 文件存储方法、装置及文件读取方法、装置
CN102521406A (zh) 海量结构化数据复杂查询任务的分布式查询方法和系统
EP3862888A1 (en) Hybrid data distribution in a massively parallel processing architecture
US11468035B2 (en) Constraint data statistics
CN108139872A (zh) 一种缓存管理方法、缓存控制器以及计算机系统
US6745198B1 (en) Parallel spatial join index
CN111159176A (zh) 一种海量流数据的存储和读取的方法和系统
CN102411632B (zh) 基于链表的内存数据库页式存储方法
CN109597829B (zh) 一种实现可搜索加密关系型数据库缓存的中间件方法
US9002903B2 (en) Database system with data organization providing improved bit parallel processing
CN110109763A (zh) 一种共享内存管理方法及装置
Zhang et al. COLIN: A cache-conscious dynamic learned index with high read/write performance
US11068484B2 (en) Accelerating queries with complex conditions using zone map enhancements
CN111782659A (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