CN113641841B - 数据编码方法、图数据存储方法、图数据查询方法及装置 - Google Patents

数据编码方法、图数据存储方法、图数据查询方法及装置 Download PDF

Info

Publication number
CN113641841B
CN113641841B CN202111204226.XA CN202111204226A CN113641841B CN 113641841 B CN113641841 B CN 113641841B CN 202111204226 A CN202111204226 A CN 202111204226A CN 113641841 B CN113641841 B CN 113641841B
Authority
CN
China
Prior art keywords
data
node
graph
neighbor
edge
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
CN202111204226.XA
Other languages
English (en)
Other versions
CN113641841A (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.)
Alipay Hangzhou Information Technology Co Ltd
Original Assignee
Alipay Hangzhou Information Technology Co Ltd
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 Alipay Hangzhou Information Technology Co Ltd filed Critical Alipay Hangzhou Information Technology Co Ltd
Priority to CN202111204226.XA priority Critical patent/CN113641841B/zh
Publication of CN113641841A publication Critical patent/CN113641841A/zh
Application granted granted Critical
Publication of CN113641841B publication Critical patent/CN113641841B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/50Information retrieval; Database structures therefor; File system structures therefor of still image data
    • G06F16/51Indexing; 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/50Information retrieval; Database structures therefor; File system structures therefor of still image data
    • G06F16/53Querying

Landscapes

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

Abstract

本说明书的实施例提供数据编码方法、图数据存储方法、图数据查询方法及装置。在该数据编码方法中,基于数据记录的键值对中的键对待编码数据的各个数据记录进行数据分片,所得到的各个数据分片的分片标识基于该数据分片中的数据记录的键的一致性哈希值确定。针对各个数据分片,通过使用完美哈希算法对该数据分片中的各个数据记录的键值对中的键进行完美哈希计算,确定各个数据记录在该数据分片中的片内索引。基于待编码数据的各个数据记录在对应数据分片中的片内索引,将各个数据记录的键值对记录到对应数据分片;并且针对记录有数据记录的每个数据分片,分别生成数据分片文件以及对应的完美哈希因子文件。

Description

数据编码方法、图数据存储方法、图数据查询方法及装置
技术领域
本说明书实施例通常涉及数据库领域,尤其涉及基于完美哈希的数据编码方法、图数据存储方法、图数据查询方法及装置以及数据库系统。
背景技术
图数据的应用场景越来越广泛,并且图数据的数量也越来越庞大。图数据相比单一键值对格式的非图数据更加复杂。在进行图数据存储时,通常将图数据中的节点数据、边数据和邻居数据分别存储在点表、边表和邻居表中。利用现有数据存储方案进行图数据存储,不能实现较高数据查询效率。
发明内容
鉴于上述,本说明书实施例提供基于完美哈希的数据存储及图数据查询方案。利用该数据存储及图数据查询方案,通过将待存储数据以数据分片形式存储,并且使用待存储数据的键值对中的键的完美哈希值作为待存储数据在数据分片中的片内索引,所得到的片内索引占用较小的存储空间,从而使得所生成的数据分片文件具有较小尺寸,适合于在进行数据查询时加载到数据存储服务器的内存中,由此在图数据查询时避免进行IO读取,从而提升图数据查询效率。
根据本说明书实施例的一个方面,提供一种基于完美哈希的数据编码方法,包括:基于数据记录的键值对中的键对待编码数据的各个数据记录进行数据分片,所得到的各个数据分片的分片标识基于该数据分片中的数据记录的键的一致性哈希值确定;针对各个数据分片,通过使用完美哈希算法对该数据分片中的各个数据记录的键值对中的键进行完美哈希计算,确定各个数据记录在该数据分片中的片内索引;基于所述待编码数据的各个数据记录在对应数据分片中的片内索引,将各个数据记录的键值对记录到对应数据分片;以及针对记录有数据记录的每个数据分片,分别生成数据分片文件以及对应的完美哈希因子文件。
可选地,在上述方面的一个示例中,基于数据记录的键值对中的键对待编码数据的各个数据记录进行数据分片可以包括:对待编码数据中的各个数据记录的键值对中的键进行一致性哈希计算;对各个数据记录的一致性哈希值进行以数据分片数量为模数的取模处理;以及将取模结果相同的数据记录划分到同一数据分片,各个数据分片的分片标识基于对应的取模结果确定。
可选地,在上述方面的一个示例中,所述待编码数据包括图数据的点表数据,所述点表数据的每个节点数据中的图节点的节点标识和节点属性在数据编码时分别充当该节点数据的键和值。基于所述待编码数据的各个数据记录在对应数据分片中的分片索引,将各个数据记录的键值对记录到对应数据分片可以包括:基于各个节点数据在对应数据分片中的节点数据片内索引,将各个节点数据的节点标识和节点属性记录到对应数据分片。
可选地,在上述方面的一个示例中,所述待编码数据包括图数据的边表数据,所述边表数据的每个边数据包括起始图节点的节点标识、终止图节点的节点标识以及边属性。在对所述边表数据的各个边数据进行数据分片之前,所述数据编码方法还可以包括:通过下述过程对所述边表数据中的边数据进行数据更新:针对每条边,分别基于起始图节点的节点标识和终止图节点的节点标识进行节点分片,确定起始图节点和终止图节点所在节点分片的节点分片标识,各个节点分片的节点分片标识基于对应节点标识的一致性哈希值确定,以及分别使用点表数据编码时的完美哈希因子文件中的对应完美哈希因子计算起始图节点的节点标识的完美哈希值以及终止图节点的节点标识的完美哈希值,确定起始图节点和终止图节点在所在节点分片中的片内索引;分别将各个起始图节点的节点分片标识和片内索引组合以及将各个终止图节点的节点分片标识和片内索引组合,得到各个起始图节点的全局节点标识和各个终止图节点的全局节点标识;以及针对每条边,将起始图节点的全局节点标识和终止图节点的全局节点标识组合为边标识,其中,边标识在数据编码时充当边数据的键,以及边属性在数据编码时充当边数据的值。
可选地,在上述方面的一个示例中,基于所述待编码数据的各个数据记录在对应数据分片中的片内索引,将各个数据记录的键值对记录到对应数据分片可以包括:基于各个更新后的边数据在对应边数据分片中的边数据片内索引,将各个更新后的边数据的边属性记录到对应边数据分片。
可选地,在上述方面的一个示例中,所述待编码数据包括图数据的邻居表数据,所述邻居表数据的每个邻居数据包括起始图节点的节点标识以及所有终止图节点的节点标识。所述数据编码方法还可以包括:通过下述过程将所有终止图节点的节点标识更新为全局节点标识:针对每个终止图节点,基于该终止图节点的节点标识进行节点分片,确定该终止图节点所在节点分片的节点分片标识,所述节点分片标识基于该终止图节点的节点标识的一致性哈希值确定,使用点表数据编码时的完美哈希因子文件中的对应完美哈希因子计算该终止图节点的节点标识的完美哈希值,确定该终止图节点在所在节点分片中的片内索引;以及将该终止图节点的节点分片标识和片内索引组合,得到该终止图节点的全局节点标识,其中,邻居数据中的起始图节点的节点标识在数据编码时充当邻居数据的键,以及邻居数据中的所有终止图节点的全局节点标识在数据编码时充当邻居数据的值。基于所述待编码数据的各个数据记录在对应数据分片中的片内索引,将各个数据记录的键值对记录到对应数据分片可以包括:基于各个邻居数据在对应邻居数据分片中的邻居数据片内索引,将各个邻居数据的起始图节点的节点标识以及所有终止图节点的全局节点标识记录到对应邻居数据分片。
可选地,在上述方面的一个示例中,所有终止图节点的全局节点标识采用整数表征并且按照升序记录到对应邻居数据分片,以及所述全局节点标识按照增量变长整数编码方式记录。
根据本说明书的实施例的另一方面,提供一种基于完美哈希的图数据存储方法,所述图数据包括点表数据、边表数据和邻居表数据,所述图数据存储方法包括:按照如上所述的数据编码方法对点表数据进行数据编码,以生成节点数据分片文件和对应的完美哈希因子文件;按照如上所述的数据编码方法对边表数据进行数据编码,以生成边数据分片文件和对应的完美哈希因子文件;按照如上所述的数据编码方法对邻居表数据进行数据编码,以生成邻居数据分片文件和对应的完美哈希因子文件;以及将所述节点数据分片文件和对应的完美哈希因子文件、所述边数据分片文件和对应的完美哈希因子文件、以及邻居数据分片文件和对应的完美哈希因子文件分别存储到点表服务器、边表服务器和邻居表服务器。
根据本说明书的实施例的另一方面,提供一种基于完美哈希的图数据查询方法,图数据按照如上所述的图数据存储方法存储到点表服务器、边表服务器和邻居表服务器,所述图数据查询方法可以包括:响应于接收到来自用户的图数据查询请求,基于所述图数据查询请求中的待查询图节点的节点标识向邻居表服务器发起节点标识查询,得到所述待查询图节点的全局节点标识以及所有邻居图节点的全局节点标识;基于各个邻居图节点的全局节点标识向点表服务器发起节点数据查询,得到所有邻居图节点的节点数据;基于所述待查询图节点的全局节点标识以及各个邻居图节点的全局节点标识向边表服务器发起边数据查询,得到所述待查询图节点的边数据;以及将所述待查询图节点的边数据以及所有邻居图节点的节点数据提供给所述用户。
可选地,在上述方面的一个示例中,将所述待查询图节点的边数据以及所有邻居图节点的节点数据提供给所述用户可以包括:将所述待查询图节点的边数据以及所有邻居图节点的节点数据组装成图结构数据提供给所述用户。
可选地,在上述方面的一个示例中,在进行图数据查询之前,所述节点数据分片文件、边数据分片文件、邻居数据分片文件以及对应的完美哈希因子文件被加载到对应数据服务器的内存中。
可选地,在上述方面的一个示例中,基于所述图数据查询请求中的待查询图节点的节点标识向邻居表服务器发起节点标识查询,得到所述待查询图节点的全局节点标识以及所有终止图节点的全局节点标识包括:对所述待查询图节点的节点标识进行一致性哈希计算,确定邻居数据分片的邻居数据分片标识;向所述邻居数据分片标识所标识的邻居表服务器发送节点标识查询请求,所述节点标识查询请求包括所述待查询图节点的节点标识;以及接收所述邻居表服务器响应于所述节点标识查询请求而返回的所述待查询图节点的全局节点标识以及所有邻居图节点的全局节点标识,其中,所有邻居图节点的全局节点标识通过从所述邻居表服务器的邻居数据分片文件中邻居数据片内索引所索引的记录位置处获取,所述邻居数据片内索引通过使用完美哈希因子文件中的对应完美哈希因子计算所述待查询图节点的节点标识的完美哈希值得到,以及所述待查询图节点的全局节点标识通过组合所述邻居数据分片的邻居数据分片标识以及所述邻居数据片内索引得到。
可选地,在上述方面的一个示例中,基于各个邻居图节点的全局节点标识向点表服务器发起节点数据查询,得到所有邻居图节点的节点数据可以包括:对各个邻居图节点的全局节点标识进行解组合,得到各个邻居图节点所在节点数据分片的节点数据分片标识以及邻居图节点的节点数据片内索引;基于各个邻居图节点的节点数据分片标识,向各个邻居图节点的节点数据分片标识所标识的点表服务器发起针对各个邻居图节点的节点数据查询请求,所述节点数据查询请求包括对应邻居图节点的节点数据片内索引;以及接收所述点表服务器响应于所述节点数据查询请求而返回的各个邻居图节点的节点数据,其中,所述邻居图节点的节点数据由所述点表服务器基于所述节点数据片内索引从节点数据分片文件中获取。
可选地,在上述方面的一个示例中,基于所述待查询图节点的全局节点标识以及各个邻居图节点的全局节点标识向边表服务器发起边数据查询,得到所述待查询图节点的边数据可以包括:将所述待查询图节点的全局节点标识与各个邻居图节点的全局节点标识分别进行组合,得到各个边的边标识;对各个边的边标识进行一致性哈希计算,确定各个边所在边数据分片的边数据分片标识;向所确定的边数据分片标识所标识的边表服务器发送边数据查询请求,所述边数据查询请求包括边标识;以及接收所述边表服务器响应于所述边数据查询请求而返回的所述待查询图节点的边数据,其中,所述待查询图节点的边数据基于边数据片内索引从所述边表服务器的边数据分片文件中获取,所述边数据片内索引通过使用完美哈希因子文件中的对应完美哈希因子计算所述边标识的完美哈希值得到。
根据本说明书的实施例的另一方面,提供一种基于完美哈希的数据编码装置,包括:数据分片单元,基于数据记录的键值对中的键对待编码数据的各个数据记录进行数据分片,所得到的各个数据分片的分片标识基于该数据分片中的数据记录的键的一致性哈希值确定;片内索引确定单元,针对各个数据分片,通过使用完美哈希算法对该数据分片中的各个数据记录的键值对中的键进行完美哈希计算,确定各个数据记录在该数据分片中的片内索引;数据记录单元,基于所述待编码数据的各个数据记录在对应数据分片中的片内索引,将各个数据记录的键值对记录到对应数据分片;以及文件生成单元,针对记录有数据记录的每个数据分片,分别生成数据分片文件以及对应的完美哈希因子文件。
可选地,在上述方面的一个示例中,所述数据分片单元可以包括:哈希计算模块,对待编码数据中的各个数据记录的键值对中的键进行一致性哈希计算;取模处理模块,对各个数据记录的一致性哈希值进行以数据分片数量为模数的取模处理;以及数据分片模块,将取模结果相同的数据记录划分到同一数据分片,各个数据分片的分片标识基于对应的取模结果确定。
可选地,在上述方面的一个示例中,所述待编码数据包括图数据的点表数据,所述点表数据的每个节点数据中的图节点的节点标识和节点属性在数据编码时分别充当该节点数据的键和值,所述数据记录单元基于各个节点数据在对应数据分片中的片内索引,将各个节点数据的节点标识和节点属性记录到对应数据分片。
可选地,在上述方面的一个示例中,所述待编码数据包括图数据的边表数据,所述边表数据的每个边数据包括起始图节点的节点标识、终止图节点的节点标识以及边属性。所述数据编码装置还可以包括:第一数据更新单元,在对所述边表数据的各个边数据进行数据分片之前,通过下述过程对所述边表数据中的边数据进行数据更新:针对每条边,分别基于该边的起始图节点和终止图节点的节点标识进行节点分片,确定起始图节点和终止图节点所在节点分片的节点分片标识,各个节点分片的节点分片标识基于对应节点标识的一致性哈希值确定,以及分别使用点表数据编码时的完美哈希文件中的对应完美哈希因子计算起始图节点的节点标识的完美哈希值以及终止图节点的节点标识的完美哈希值,确定起始图节点和终止图节点在所在节点分片中的节点数据片内索引;分别将各个起始图节点的节点分片标识和节点数据片内索引组合以及将各个终止图节点的节点分片标识和节点数据片内索引组合,得到各个起始图节点的全局节点标识和各个终止图节点的全局节点标识;以及针对每条边,将起始图节点的全局节点标识和终止图节点的全局节点标识组合为该边的边标识,其中,边标识在数据编码时充当边数据的键,以及边属性在数据编码时充当边数据的值。
可选地,在上述方面的一个示例中,所述数据记录单元基于各个更新后的边数据在对应边数据分片中的边数据片内索引,将各个更新后的边数据的边属性记录到对应边数据分片中。
可选地,在上述方面的一个示例中,所述待编码数据包括图数据的邻居表数据,所述邻居表数据的每个邻居数据包括起始图节点的节点标识以及所有终止图节点的节点标识。所述数据编码装置还可以包括:第二数据更新单元,通过下述过程将所有终止图节点的终止图节点的节点标识更新为全局节点标识:针对每个终止图节点,基于对该终止图节点的节点标识进行节点分片,确定该终止图节点所在节点分片的节点分片标识,所述节点分片标识基于该终止图节点的节点标识的一致性哈希值确定,使用点表数据编码时的完美哈希文件中的对应完美哈希因子对该终止图节点的节点标识进行完美哈希计算,确定该终止图节点在所在节点分片中的节点数据片内索引;以及将该终止图节点的节点分片标识和节点数片内索引组合,得到该终止图节点的全局节点标识,所述数据记录单元基于各个邻居数据在对应邻居数据分片中的邻居数据片内索引,将各个邻居数据的起始图节点的节点标识以及所有终止图节点的全局节点标识记录到对应邻居数据分片中,其中,邻居数据中的起始图节点的节点标识在数据编码时充当邻居数据的键,以及邻居数据中的所有终止图节点的全局节点标识在数据编码时充当邻居数据的值。
根据本说明书的实施例的另一方面,提供一种基于完美哈希的图数据存储装置,包括:点表数据编码单元,按照如上所述的数据编码方法对点表数据进行数据编码,以生成节点数据分片文件以及对应的完美哈希因子文件;边表数据编码单元,按照如上所述的数据编码方法对边表数据进行数据编码,以生成边数据分片文件以及对应的完美哈希因子文件;邻居表数据编码单元,按照如上所述的数据编码方法对邻居表数据进行数据编码,以生成邻居数据分片文件以及对应的完美哈希因子文件;以及数据存储单元,将所生成的节点数据分片文件以及对应的完美哈希因子文件、边数据分片文件以及对应的完美哈希因子文件和邻居数据分片文件以及对应的完美哈希因子文件分别存储到点表服务器、边表服务器和邻居表服务器。
根据本说明书的实施例的另一方面,提供一种基于完美哈希的图数据查询装置,图数据按照如上所述的图数据存储方法存储到点表服务器、边表服务器和邻居表服务器中,所述图数据查询装置包括:邻居数据查询单元,响应于接收到来自用户的图数据查询请求,基于所述图数据查询请求中的待查询图节点的节点标识向邻居表服务器发起节点标识查询,得到所述待查询图节点的全局节点标识以及所有邻居图节点的全局节点标识;节点数据查询单元,基于各个邻居图节点的全局节点标识向点表服务器发起节点数据查询,得到所有邻居图节点的节点数据;边表数据查询单元,基于所述待查询图节点的全局节点标识以及各个邻居图节点的全局节点标识向边表服务器发起边数据查询,得到所述待查询图节点的边数据;以及查询数据提供单元,将所述待查询图节点的边数据以及所有邻居图节点的节点数据提供给所述用户。
可选地,在上述方面的一个示例中,所述邻居数据查询单元可以包括:分片标识确定模块,对所述待查询图节点的节点标识进行一致性哈希计算,确定邻居数据分片的邻居数据分片标识;节点标识查询请求发送模块,向所述邻居数据分片标识所标识的邻居表服务器发送节点标识查询请求,所述节点标识查询请求包括所述待查询图节点的节点标识;以及节点标识接收模块,接收所述邻居表服务器响应于所述节点标识查询请求而返回的所述待查询图节点的全局节点标识以及所有邻居图节点的全局节点标识,其中,所有邻居图节点的全局节点标识通过从所述邻居表服务器的邻居数据分片文件中邻居数据片内索引所索引的记录位置处获取,所述邻居数据片内索引通过使用完美哈希文件中的对应完美哈希因子计算所述待查询图节点的节点标识的完美哈希值得到,以及所述待查询图节点的全局节点标识通过组合所述邻居数据分片标识以及所述邻居数据片内索引得到。
可选地,在上述方面的一个示例中,所述节点数据查询单元可以包括:全局节点标识处理模块,对各个邻居图节点的全局节点标识进行解组合,得到各个邻居图节点所在节点数据分片的节点数据分片标识以及各个邻居图节点的节点数据片内索引;节点数据查询请求发送模块,基于各个邻居图节点的节点数据分片标识,向各个邻居图节点的节点数据分片标识所标识的点表服务器发起针对各个邻居图节点的节点数据查询请求,所述节点数据查询请求包括对应邻居图节点的节点数据片内索引;以及节点数据接收模块,接收所述点表服务器响应于所述节点数据查询请求而返回的各个邻居图节点的节点数据,其中,所述邻居图节点的节点数据由所述点表服务器基于所述节点数据片内索引从对应的节点数据分片文件中获取。
可选地,在上述方面的一个示例中,所述边数据查询单元包括:边标识生成单元,将所述待查询图节点的全局节点标识与各个邻居图节点的全局节点标识分别进行组合,得到各个边的边标识;分片标识确定模块,对所得到的各个边的边标识进行一致性哈希计算,确定各个边所在边数据分片的边数据分片标识;边数据查询请求发送模块,向各个边数据分片标识所标识的边表服务器发送边数据查询请求,所述边数据查询请求包括边标识;以及边数据接收模块,接收所述边表服务器响应于所述边数据查询请求而返回的所述待查询图节点的边数据,其中,所述待查询图节点的边数据基于边数据片内索引从所述邻居表服务器的边数据分片文件中获取,所述边数据片内索引通过使用完美哈希文件中的对应完美哈希因子计算所述边标识的完美哈希值得到。
根据本说明书的实施例的另一方面,提供一种图数据库系统,包括:如上所述的图数据存储装置;如上所述的图数据查询装置;以及数据服务器,包括点表服务器、边表服务器和邻居表服务器。
根据本说明书的实施例的另一方面,提供一种数据编码装置,包括:至少一个处理器,与所述至少一个处理器耦合的存储器,以及存储在所述存储器中的计算机程序,所述至少一个处理器执行所述计算机程序来实现如上所述的数据编码方法。
根据本说明书的实施例的另一方面,提供一种图数据存储装置,包括:至少一个处理器,与所述至少一个处理器耦合的存储器,以及存储在所述存储器中的计算机程序,所述至少一个处理器执行所述计算机程序来实现如上所述的图数据存储方法。
根据本说明书的实施例的另一方面,提供一种图数据查询装置,包括:至少一个处理器,与所述至少一个处理器耦合的存储器,以及存储在所述存储器中的计算机程序,所述至少一个处理器执行所述计算机程序来实现如上所述的图数据查询方法。
根据本说明书的实施例的另一方面,提供一种计算机可读存储介质,其存储有可执行指令,所述指令当被执行时使得处理器执行如上所述的数据编码方法、执行如上所述的图数据存储方法、或者执行如上所述的图数据查询方法。
根据本说明书的实施例的另一方面,提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行来实现如上所述的数据编码方法、执行如上所述的图数据存储方法、或者执行如上所述的图数据查询方法。
附图说明
通过参照下面的附图,可以实现对于本说明书内容的本质和优点的进一步理解。在附图中,类似组件或特征可以具有相同的附图标记。
图1示出了根据本说明书的实施例的图数据库系统的示例示意图。
图2示出了根据本说明书的实施例的数据编码方法的示例流程图。
图3示出了根据本说明书的实施例的数据分片过程的示例流程图。
图4示出了根据本说明书的实施例的数据分片过程的示例示意图。
图5示出了根据本说明书的实施例的数据记录的数据分片记录过程的示例示意图。
图6示出了有向图图数据的示例示意图。
图7示出了根据本说明书的实施例的原始图数据的示例示意图。
图8示出了根据本说明书的实施例的数据分片中记录的节点数据、边数据和邻居数据的示例示意图。
图9示出了根据本说明书的实施例的图数据存储方法的示例流程图。
图10示出了根据本说明书的实施例的图数据查询方法的示例流程图。
图11示出了根据本说明书的实施例的邻居数据查询过程的示例流程图。
图12示出了根据本说明书的实施例的节点数据查询过程的示例流程图。
图13示出了根据本说明书的实施例的边数据查询过程的示例流程图。
图14示出了根据本说明书的实施例的经过组装后的图结构数据的示例示意图。
图15示出了根据本说明书的实施例的图数据查询过程的示例示意图。
图16示出了根据本说明书的实施例的数据编码装置的示例方框图。
图17示出了根据本说明书的实施例的数据分片单元的示例方框图。
图18示出了根据本说明书的实施例的图数据存储装置的示例方框图。
图19示出了根据本说明书的实施例的图数据查询装置的示例方框图。
图20示出了根据本说明书的实施例的邻居数据查询单元的示例方框图。
图21示出了根据本说明书的实施例的节点数据查询单元的示例方框图。
图22示出了根据本说明书的实施例的边数据查询单元的示例方框图。
图23示出了根据本说明书的实施例的基于计算机系统实现的数据编码装置的示例示意图。
图24示出了根据本说明书的实施例的基于计算机系统实现的数据存储装置的示例示意图。
图25示出了根据本说明书的实施例的基于计算机系统实现的图数据查询装置的示例示意图。
具体实施方式
现在将参考示例实施方式讨论本文描述的主题。应该理解,讨论这些实施方式只是为了使得本领域技术人员能够更好地理解从而实现本文描述的主题,并非是对权利要求书中所阐述的保护范围、适用性或者示例的限制。可以在不脱离本说明书内容的保护范围的情况下,对所讨论的元素的功能和排列进行改变。各个示例可以根据需要,省略、替代或者添加各种过程或组件。例如,所描述的方法可以按照与所描述的顺序不同的顺序来执行,以及各个步骤可以被添加、省略或者组合。另外,相对一些示例所描述的特征在其它例子中也可以进行组合。
如本文中使用的,术语“包括”及其变型表示开放的术语,含义是“包括但不限于”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一实施例”表示“至少一个实施例”。术语“另一个实施例”表示“至少一个其他实施例”。术语“第一”、“第二”等可以指代不同的或相同的对象。下面可以包括其他的定义,无论是明确的还是隐含的。除非上下文中明确地指明,否则一个术语的定义在整个说明书中是一致的。
图数据包括图节点数据和边数据。图节点数据例如可以包括图节点的节点标识(节点ID)和节点属性,以及边数据可以包括起始图节点标识、终止图节点标识和边属性数据。图节点的节点标识用于唯一标识节点。节点标识、节点属性数据和边属性数据可以与业务相关。比如,对于社交网络场景,节点标识可以是人的身份证号码或者人员编号等。节点属性数据可以包括年龄、学历、住址、职业等。边属性数据可以包括节点与节点之间的关系,即,人与人之间的关系,比如,同学/同事关系等。
在一些图数据存储方案中,图数据规模较大,不适合于存储在数据服务器的内存中,从而需要将图数据存储到例如磁盘的数据存储介质。在进行图数据查询时,需要通过IO读取操作来将图数据从数据存储介质读取到数据服务器的内存。这里,IO读取是指通过数据服务器的操作系统的IO接口来与数据存储介质(例如,磁盘)进行数据交互。相较于内存存储,IO读取操作会延长图数据查询延时,从而导致图数据查询效率不佳。
鉴于此,本说明书的实施例提供一种图数据存储方案。在该图数据存储方案中,针对图数据中的点表数据、边表数据和邻居表数据分别执行基于完美哈希的数据编码。在进行数据编码时,分别基于节点数据、边数据和邻居数据的键值对中的键的一致性哈希计算结果,将节点数据、边数据和邻居数据分片为多个数据分片,并且使用键值对中的键的完美哈希值作为各个数据在对应数据分片中的片内索引。然后,按照片内索引将各个数据记录到对应数据分片中,并生成对应的数据分片文件存储到点表服务器、边表服务器和邻居表服务器。按照上述图数据存储方案,由于片内索引基于完美哈希得到,所得到的片内索引占用较小的存储空间,从而使得所生成的数据分片文件具有较小尺寸,适合于在进行数据查询时加载到点表服务器、边表服务器和邻居表服务器的内存中,从而在图数据查询时避免进行IO读取,由此提升图数据查询效率。
下面将参照附图描述根据本说明书的实施例的图数据库系统、数据编码方法、数据编码装置、图数据存储方法、图数据存储装置、图数据查询方法及图数据查询装置。
图1示出了根据本说明书的实施例的图数据库系统100的示例示意图。图数据库系统100也可以称为图数据库应用的服务端,用于提供图数据存储服务和图数据查询服务。
如图1所示,图数据库系统100包括图数据存储装置110、图数据查询装置120和数据服务器130。在图1的示例中,数据服务器130包括点表服务器130-1、边表服务器130-2和邻居表服务器130-3。
图数据存储装置110被配置为将图数据中的节点数据、边数据和邻居数据分别存储到点表服务器130-1、边表服务器130-2和邻居表服务器130-3中。图数据查询装置120被配置为响应于图数据查询请求,从点表服务器130-1、边表服务器130-2和邻居表服务器130-3中获取并返回图节点的边数据以及邻居图节点的节点数据。图数据存储过程和图数据查询过程将在下面参照附图详细描述。
在一些实施例中,点表服务器130-1、边表服务器130-2和邻居表服务器130-3可以分别包括多个数据服务器。在进行图数据存储时,将节点数据、边数据和邻居数据分别存储在多个点表服务器130-1、多个边表服务器130-2和多个邻居表服务器130-3,从而形成分布式图数据库系统。
在根据本说明书的实施例的图数据存储过程中,需要进行基于完美哈希的数据编码处理。
图2示出了根据本说明书的实施例的数据编码方法200的示例流程图。在数据编码方法200中,待编码数据包括多个数据记录,并且每个数据记录以键值对形式表征。
如图2所示,在210,基于数据记录的键值对中的键,对待编码数据中的各个数据记录进行数据分片,所得到的各个数据分片的分片标识基于该数据分片中的数据记录的键的一致性哈希值确定。
图3示出了根据本说明书的实施例的数据分片过程300的示例流程图。
如图3所示,在310,对待编码数据中的各个数据记录的键值对中的键进行一致性哈希计算。在本说明书中,术语“一致性哈希计算”是指普通哈希计算。对于任意给定数据,无论经过多少次一致性哈希计算,所得到的哈希计算结果都相同。此外,一致性哈希计算可能会出现哈希碰撞。换言之,对于两个给定数据,在经过一致性哈希计算后,所得到的哈希计算结果可能会相同。
例如,在一个示例中,每个数据记录可以包括“节点ID”字段和“节点属性”字段,并且“节点ID”字段作为数据记录的键,以及“节点属性”字段作为数据记录的值。在这种情况下,可以对数据记录中的“节点ID”进行一致性哈希处理,得到节点ID的一致性哈希值。
在如上计算出各个数据记录的一致性哈希值后,在320,对各个数据记录的一致性哈希值以数据分片数量为模数进行取模处理。例如,假设数据分片数量为N,则对各个数据记录的一致性哈希值进行%N处理。
在330,将取模结果相同的数据记录划分到同一数据分片,由此实现针对待编码数据中的数据记录的数据分片处理。各个数据分片具有分片标识,并且各个数据分片的分片标识可以基于该数据分片中的数据记录的一致性哈希值的取模结果确定。在一个示例中,各个数据记录的取模处理结果可以采用32位整数表示,该32位整数可以用作数据记录所在数据分片的分片标识。图4示出了根据本说明书的实施例的数据分片过程的示例示意图。
回到图2,在如上对待编码数据中的数据记录进行数据分片后,在220,针对各个数据分片,通过使用完美哈希算法对该数据分片中的各个数据记录的键值对中的键进行完美哈希计算,确定该数据分片中的各个数据记录在该数据分片中的片内索引。这里,数据记录的片内索引可以基于该数据记录的完美哈希值确定。
要说明的是,术语“完美哈希计算”是针对给定范围内的任意数据,经过完美哈希计算后得到的完美哈希值都不相同,从而可以利用该完美哈希值唯一地映射该数据。在进行完美哈希计算时,需要基于该给定范围内的数据在完美哈希计算过程中确定出完美哈希因子,每个数据或者多个数据可以对应一个完美哈希因子。在使用完美哈希算法对数据进行完美哈希计算时,可以确保该给定范围内的数据所得到的完美哈希值是唯一值。这里,完美哈希值的唯一性相对于该给定范围内的数据,根据该给定范围之外的数据得到的哈希值可能会与该给定范围内的数据所对应的完美哈希值相同。
在一个示例中,数据记录的完美哈希值可以采用32位整数表示,该32位整数可以用作数据记录在数据分片中的片内索引。术语“片内索引”也可以称为“分片内索引”,用于索引数据分片中的哈希槽位。数据分片中的哈希槽位也可以认为是数据分片中的记录位置或记录顺序。例如,假设数据分片可以被分割为用于记录数据的多个记录位置或字段,则每个哈希槽位相当于一个记录位置或字段。这里,每个记录位置或字段的长度都相同,例如,每个记录位置为32位。在一个示例中,假设存在N个数据记录,则哈希槽位的数量通常设定为1.1N个。
在230,基于待编码数据的各个数据记录在对应数据分片中的片内索引,将各个数据记录的键值对记录到对应数据分片中。即,对于每个数据记录,基于片内索引找到数据分片中的对应哈希槽位,然后,将该数据记录的数据信息记录在该哈希槽位上。所记录的数据信息例如可以包括该数据记录的键值对,或者所记录的数据信息也可以不包括该数据记录的键。在其它示例中,在数据记录包括其它信息的情况下,还可以将其它信息也记录在数据分片中。例如,在待编码数据是图数据的情况下,每个图节点的节点数据除了包括节点标识和节点属性之外,还可以包括用于记录数据过滤条件的节点元数据,比如,节点类型、时间戳信息等。在这种情况下,也可以将节点元数据记录在数据分片中。图5示出了根据本说明书的实施例的数据记录的数据分片记录过程的示例示意图。
在240,针对记录有数据记录的每个数据分片,分别生成数据分片文件以及对应的完美哈希因子文件。完美哈希因子文件包括各个数据记录进行完美哈希计算时所使用的完美哈希因子,并且完美哈希因子与数据记录之间具有对应关系。利用该对应关系,可以基于数据记录,从完美哈希因子文件中找到对应的完美哈希因子。在一个示例中,完美哈希因子可以与数据记录之间具有一一对应关系。在另一示例中,完美哈希因子可以与数据记录之间形成一对多的对应关系。
图2示出的数据编码过程可以应用于对图数据进行数据编码。在本说明书中,图数据包括有向图图数据。术语“有向图”是指图节点之间的边关系具有方向性的图数据。在本说明书中,术语“邻居图节点”是指沿着边的方向一跳可以到达的图节点。图6示出了有向图图数据的示例示意图。在图6的示例中,示出了6个图节点A、B、C、D、E和F。图节点B、C和D是图节点A的邻居节点,图节点F是图节点C的邻居节点。图节点E不是图节点A的邻居节点,但图节点E是图节点A的逆向邻居节点。
图数据可以包括点表数据、边表数据和邻居表数据。在一个示例中,点表数据、边表数据和邻居表数据可以由图数据拥有方提供。在另一示例中,图数据拥有方可以仅仅提供点表数据和边表数据。在接收到点表数据和边表数据后,数据编码装置通过以起始图节点为键,以终止图节点为值,将相同起始图节点的所有终止图节点组合在一起形成邻居表数据。
图7示出了根据本说明书的实施例的原始图数据的示例示意图。在图7的示例中,点表数据包括图节点的节点数据,该节点数据具有2个字段,即,用于保存节点标识(节点ID)的节点标识字段以及用于保存节点属性的节点属性字段。边表数据包括图节点的边数据,该边数据具有3个字段,即,用于保存起始图节点的节点标识的起点标识(起点ID)字段、用于保存终止图节点的节点标识的终点标识(终点ID)字段以及用于保存边属性的边属性字段。邻居表数据包括图节点的邻居数据,该邻居数据具有2个字段,即,用于保存起始图节点的节点标识的起点标识(起点ID)字段以及用于保存各个邻居图节点的节点标识的邻居图节点标识(邻居节点ID)字段。这里,邻居图节点标识字段可以保存多个邻居图节点的节点标识。在本说明书中,邻居节点可以与终止图节点互换使用。
在待编码数据为图数据的点表数据时,可以使用图2中示出的数据编码过程来对点表数据进行数据编码。在该数据编码过程中,节点数据中的图节点的节点标识和节点属性分别充当该节点数据的键和值。在如上确定出各个节点数据在对应数据分片中的节点数据片内索引后,基于各个节点数据在对应数据分片中的节点数据片内索引,将各个节点数据的节点标识和节点属性记录到对应数据分片中,即,将各个节点数据的节点标识和节点属性记录到节点数据片内索引所索引的哈希槽位中。
在待编码数据为图数据的边表数据时,在对各个边数据进行数据分片之前,还需要对边数据进行数据更新,即,将每个边数据的中的起始图节点的节点标识和终止图节点的节点标识更新为该边数据的边标识。在进行数据编码时,更新后的边数据的边标识充当边数据的键,以及边属性充当边数据的值。
具体地,针对每条边,分别基于起始图节点的节点标识和终止图节点的节点标识进行节点分片,确定起始图节点和终止图节点所在节点分片的节点分片标识。起始图节点和终止图节点的节点分片以及节点分片标识确定可以参考上面参照图2的210描述的过程。
接着,分别使用点表数据编码时的完美哈希因子文件中的对应完美哈希因子,计算起始图节点的节点标识的完美哈希值以及终止图节点的节点标识的完美哈希值,从而确定起始图节点和终止图节点在所在节点分片中的片内索引。起始图节点和终止图节点的片内索引确定可以参考上面参照图2的220描述的过程。
在如上得到各个起始图节点的节点分片标识和片内索引以及各个终止图节点的节点分片标识和片内索引后,将各个起始图节点的节点分片标识与片内索引组合,得到各个起始图节点的全局节点标识,以及将各个终止图节点的节点分片标识与片内索引组合,得到各个终止图节点的全局节点标识。在本说明书中,术语“组合”用于指代可识别出的组合方式。换言之,针对组合后的全局节点标识,可以识别出原始节点分片标识和原始片内索引。例如,假设节点分片标识和片内索引都采用32位整数表示。在一个示例中,可以将节点分片标识和片内索引级联为64位整数,其中,在全局节点标识中,高32位(前32位)为节点分片标识,以及低32位(后32位)为片内索引。在另一示例中,可以采用间隔符的方式组合节点分片标识和片内索引,即,节点分片标识_片内索引。间隔符的示例可以包括但不限于“_”、“/”、“\”、“&”等。
针对每条边,在如上得到起始图节点的全局节点标识和终止图节点的全局节点标识,将起始图节点的全局节点标识和终止图节点的全局节点标识组合为边标识,由此完成边数据更新。
在如上完成数据更新后,基于更新后的边数据进行数据编码。针对更新后的边数据的数据编码过程可以参考上面参照图2描述的数据编码过程。在该数据编码过程中,使用更新后的键“边标识”确定边数据在边数据分片中的边数据片内索引。按照这种方式进行边数据编码后,在边数据分片中,不用存储2个字段“起点标识”和“终点标识”,而仅仅存储单个字段“边标识”,从而可以降低边数据分片的存储大小。此外,可选地,由于边存在与否可以在查询邻居表时得出,只有在邻居表中存在边的终点标识时,才会查询边表。基于上述考虑,在一些实施例中,边数据分片还可以仅仅存储“边属性”(即,值),而不存储“边标识”(即,键),从而进一步降低边数据分片所占用的存储空间。
在待编码数据为图数据的邻居表数据时,邻居表数据的每个邻居数据包括起始图节点的节点标识以及所有终止图节点的节点标识。在这种情况下,在进行数据编码时,还需要对邻居数据进行更新,即,将所有终止图节点的节点标识更新为全局节点标识。然后,基于更新后的邻居数据进行数据编码。
具体地,针对每个终止图节点,基于该终止图节点的节点标识进行节点分片,确定该终止图节点所在节点分片的节点分片标识。终止图节点的节点分片以及节点分片标识确定可以参考上面参照图2的210描述的过程。
接着,使用点表数据编码时生成的完美哈希因子文件中的对应完美哈希因子计算该终止图节点的节点标识的完美哈希值,确定该终止图节点在所在节点分片中的片内索引。终止图节点的片内索引确定可以参考上面参照图2的220描述的过程。
在如上得到终止图节点的节点分片标识和片内索引后,将该终止图节点的节点分片标识和片内索引组合,得到该终止图节点的全局节点标识。
在参考上面参照图2描述的数据编码过程确定出各个邻居数据在对应邻居数据分片中的邻居数据片内索引后,基于各个邻居数据在对应邻居数据分片中的邻居数据片内索引,将各个邻居数据的起始图节点的节点标识以及所有终止图节点的全局节点标识记录到对应邻居数据分片中。
图8示出了根据本说明书的实施例的数据分片中记录的节点数据、边数据和邻居数据的示例示意图。如图8所示,在进行数据编码后,节点数据分片中记录图节点的原始节点标识和原始节点属性,边数据分片中记录边标识以及原始边属性,以及邻居数据分片中记录起始图节点的原始节点标识以及所有邻居图节点的全局节点标识。
在一些实施例中,如果邻居数据分片中的邻居图节点的全局节点标识采用整数表征并且按照升序记录,则可以按照增量变长整数编码方式记录所有邻居图节点的全局节点标识。这里,术语“变长整数”是指整数具有几个数字,就使用几个字节存储。比如,“12”使用2个字节存储,“123”使用3个字节存储。例如,按照这种编码方式,对于相邻的2个全局节点标识,后一全局节点标识可以仅仅存储与前一全局节点标识的差值。例如,对于图8中示出的邻居表,邻居节点ID包括三个全局节点标识“Locator2”、“Locator3”和“Locator4”,则可以存储完整的Locator2,而对于“Locator3”,则存储Locator3与Locator2之间的差值(第一差值),以及对于“Locator4”,可以存储Locator4与Locator3的差值(第二差值)。在进行数据查询时,可以使用第一差值和Locator2恢复出完整的Locator3,以及使用第二差值和Locator3恢复出完整的Locator4。由于差值相对于完整的全局节点标识具有更小的数据量,从而可以使用更少的字节存储,由此可以减少邻居数据分片所占用的存储空间。
在一些实施例中,根据本说明书的实施例的数据编码方法可以利用MapReduce模型实现。MapReduce是面向大数据并行处理的计算模型、框架和平台。当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,并且指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
图9示出了根据本说明书的实施例的图数据存储方法900的示例流程图。
如图9所示,在910,按照如上所述的针对节点数据的数据编码方式对点表数据进行数据编码,以生成节点数据分片文件和对应的完美哈希因子文件。
在920,按照如上所述针对边数据的数据编码方式对边表数据进行数据编码,以生成边数据分片文件和对应的完美哈希因子文件。
在930,按照如上所述的数据编码方法对邻居表数据进行数据编码,以生成邻居数据分片文件和对应的完美哈希因子文件。
在940,将所生成的节点数据分片文件和对应的完美哈希因子文件存储到点表服务器,将所生成的边数据分片文件和对应的完美哈希因子文件存储到边表服务器,以及将所生成的邻居数据分片文件和对应的完美哈希因子文件存储到邻居表服务器。
如上参照附图描述了根据本说明书的实施例的数据编码方法以及图数据存储方法。在按照上述图数据存储方法将图数据存储到点表服务器、边表服务器和邻居表服务器后,可以响应于用户发起的图数据查询请求来进行图数据查询。
图10示出了根据本说明书的实施例的图数据查询过程1000的示例流程图。
如图10所示,在1010,响应于接收到来自用户的图数据查询请求,图数据查询装置基于图数据查询请求中的待查询图节点的节点标识向邻居表服务器发起节点标识查询,得到待查询图节点的全局节点标识以及所有邻居图节点的全局节点标识。
图11示出了根据本说明书的实施例的邻居数据查询过程1100的示例流程图。
如图11所示,在1110,在图数据查询装置处,响应于接收到图数据查询请求,对图数据查询请求中的待查询图节点的节点标识进行一致性哈希计算,确定邻居数据分片的邻居数据分片标识。所述待查询图节点可以包括一个或多个待查询图节点。
在接收到图数据查询请求后,针对每个待查询图节点的节点标识进行一致性哈希计算,在图数据查询装置处基于所得到的一致性哈希值获取邻居数据分片的邻居数据分片标识。例如,对所得到的一致性哈希值执行以分片数量为模数的取模运算,所得到的取模结果即为邻居数据分片标识。该邻居数据分片标识可以指示邻居数据分片所在邻居表服务器。
在1120,图数据查询装置向邻居数据分片标识所标识的邻居表服务器发送节点标识查询请求,所述节点标识查询请求包括待查询图节点的节点标识。
在接收到节点标识查询请求后,在1130,在邻居表服务器处,获取邻居数据分片对应的完美哈希因子文件,并根据完美哈希因子与节点标识之间的对应关系,从完美哈希因子文件中获取与待查询图节点的节点标识对应的完美哈希因子。
在得到完美哈希因子后,在1140,在邻居表服务器处,使用完美哈希因子计算待查询图节点的节点标识的完美哈希值,从而得到邻居数据片内索引,所述邻居数据片内索引用于索引邻居数据在邻居数据分片中的记录位置(哈希槽位或哈希索引位置)。
在1150,在邻居表服务器处,从邻居表服务器的邻居数据分片中邻居数据片内索引所索引的记录位置处获取所有邻居图节点的全局节点标识。在1160,组合邻居数据分片的邻居数据分片标识以及邻居数据片内索引,得到待查询图节点的全局节点标识。
在得到待查询图节点的全局节点标识以及所有邻居图节点的全局节点标识后,在1170,邻居表服务器将待查询图节点的全局节点标识以及所有邻居图节点的全局节点标识返回给图数据查询装置。
回到图10,在如上得到待查询图节点的全局节点标识以及所有邻居图节点的全局节点标识后,在1020,图数据查询装置基于各个邻居图节点的全局节点标识向点表服务器发起节点数据查询,得到所有邻居图节点的节点数据。
图12示出了根据本说明书的实施例的节点数据查询过程1200的示例流程图。
如图12所示,在1210,在图数据查询装置处,对各个邻居图节点的全局节点标识进行解组合,得到各个邻居图节点所在节点数据分片的节点数据分片标识以及邻居图节点的节点数据片内索引,所述节点数据片内索引用于索引邻居图节点的节点数据在节点数据分片中的记录位置(哈希槽位或哈希索引位置)。
例如,假设邻居图节点的全局节点标识Locator为64位整数,则该Locator的高32位为邻居图节点所在节点数据分片的节点数据分片标识,以及低32位为用于索引邻居图节点的节点数据在节点数据分片中的记录位置的节点数据片内索引。
在1220,图数据查询装置基于各个邻居图节点的节点数据分片标识,向各个邻居图节点的节点数据分片标识所标识的点表服务器发起针对各个邻居图节点的节点数据查询请求,所述节点数据查询请求包括对应邻居图节点的节点数据片内索引。
在1230,响应于接收到节点数据查询请求,点表服务器基于节点数据片内索引从节点数据分片中获取各个邻居图节点的节点数据。
在1240,点表服务器将所获取的各个邻居图节点的节点数据发送给数据查询装置。
回到图10,在1030,数据查询装置基于待查询图节点的全局节点标识以及各个邻居图节点的全局节点标识向边表服务器发起边数据查询,得到图节点的边数据。
图13示出了根据本说明书的实施例的边数据查询过程1300的示例流程图。
如图13所示,在1310,在图数据查询装置处,将待查询图节点的全局节点标识与各个邻居图节点的全局节点标识分别进行组合,得到各个边的边标识。
在1320,在图数据查询装置处,对各个边的边标识进行一致性哈希计算,确定各个边所在边数据分片的边数据分片标识。
在1330,图数据查询装置向各个边数据分片标识所标识的边表服务器发送边数据查询请求,所述边数据查询请求包括边标识。
在1340,响应于接收到边数据查询请求,在边表服务器处,从完美哈希因子文件中获取与边标识对应的完美哈希因子,并且使用该完美哈希因子计算边标识的完美哈希值得到边数据片内索引,所述边数据片内索引用于索引边数据在边数据分片中的记录位置(哈希槽位或哈希索引位置)。
在1350,在边表服务器处,基于边数据片内索引从边数据分片中获取待查询图节点的边数据。
在1360,边表服务器将所获取的待查询图节点的边数据发送给图数据查询装置。
回到图10,在如上得到待查询图节点的边数据以及所有邻居图节点的节点数据后,在1040,图数据查询装置将待查询图节点的边数据以及所有邻居图节点的节点数据提供给用户。
在一个示例中,图数据查询装置可以基于从邻居表中得到的邻居数据对所获取的图数据进行组装,然后将组装后的图结构数据提供给用户。图14示出了根据本说明书的实施例的组装后的图结构数据的示例示意图。在图14的示例中,待查询图节点的邻居图节点按照邻居图节点的邻居深度进行组装。
在一些实施例中,为了进一步提升图数据查询效率,在进行图数据查询之前,可以将节点数据分片文件、边数据分片文件、邻居数据分片文件以及对应的完美哈希因子文件加载到对应数据服务器的内存中。
图15示出了根据本说明书的实施例的图数据查询过程的示例示意图。
如图15所示,图数据查询客户端向子图查询节点(图数据查询装置)输入待查询图节点的节点标识。在接收到待查询图节点的节点标识后,子图查询节点基于待查询图节点的节点标识,向邻居表服务器发起节点标识查询请求。
响应于节点标识查询请求,邻居表服务器从邻居数据分片中获取所有邻居图节点的全局节点标识,并且基于邻居数据分片标识和邻居数据片内索引确定出待查询图节点的全局节点标识,并返回给子图查询节点。
在接收到待查询图节点的全局节点标识和所有邻居图节点的全局节点标识后,子图查询节点基于各个邻居图节点的全局节点标识,向点表服务器发起节点数据查询请求,以及基于待查询图节点的全局节点标识和所有邻居图节点的全局节点标识,向边表服务器发起边数据查询请求。这里,节点数据查询请求和边数据查询请求可以并行发起。
响应于接收到节点数据查询请求,在点表服务器处,从全局节点标识的低32位获取节点数据片内索引,并基于节点数据片内索引从节点数据分片中获取各个邻居图节点的节点数据,该节点数据包括节点标识和节点属性。然后,点表服务器将所获取的各个邻居图节点的节点数据返回给子图查询节点。
响应于接收到边数据查询请求,在边表服务器处,将待查询图节点的全局节点标识和各个邻居图节点的全局节点标识组合,得到各个边的边标识。随后,基于各个边的边标识的完美哈希值得到各个边数据的边数据片内索引。然后,基于各个边数据的边数据片内索引,从各个对应的边数据分片中获取各个边数据并返回给子图查询节点。
要说明的是,在图14的示例中,子图查询节点(图数据查询装置)作为单独的组件存在。在其它实施例中,子图查询节点也可以部署在邻居表服务器、点表服务器或边表服务器中。
图16示出了根据本说明书的实施例的数据编码装置1600的示例方框图。如图16所示,数据编码装置1600可以包括数据分片单元1610、片内索引确定单元1620、数据记录单元1630和文件生成单元1640。
数据分片单元1610被配置为基于数据记录的键值对中的键对待编码数据的各个数据记录进行数据分片,所得到的各个数据分片的分片标识基于该数据分片中的数据记录的键的一致性哈希值确定。数据分片单元1610的操作可以参考上面参照图2的210描述的操作。
片内索引确定单元1620被配置为针对各个数据分片,通过使用完美哈希算法对该数据分片中的各个数据记录的键值对中的键进行完美哈希计算,确定各个数据记录在该数据分片中的片内索引。片内索引确定单元1620的操作可以参考上面参照图2的220描述的操作。
数据记录单元1630被配置为基于待编码数据的各个数据记录在对应数据分片中的片内索引,将各个数据记录的键值对记录到对应数据分片。数据记录单元1630的操作可以参考上面参照图2的230描述的操作。
文件生成单元1640被配置为针对记录有数据记录的每个数据分片,分别生成数据分片文件以及对应的完美哈希因子文件。文件生成单元1640的操作可以参考上面参照图2的240描述的操作。
图17示出了根据本说明书的实施例的数据分片单元1610的示例方框图。如图17所示,数据分片单元1610包括哈希计算模块1611、取模处理模块1613和数据分片模块1615。
哈希计算模块1611被配置为对待编码数据中的各个数据记录的键值对中的键进行一致性哈希计算。哈希计算模块1611的操作可以参考上面参照图3的310描述的操作。
取模处理模块1613被配置为对各个数据记录的一致性哈希值进行以数据分片数量为模数的取模处理。取模处理模块1613的操作可以参考上面参照图3的320描述的操作。
数据分片模块1615被配置为将取模结果相同的数据记录划分到同一数据分片,各个数据分片的分片标识基于对应的取模结果确定。数据分片模块1615的操作可以参考上面参照图3的330描述的操作。
在一个示例中,待编码数据包括图数据的点表数据。在进行数据编码时,点表数据的每个节点数据中的图节点的节点标识和节点属性分别充当该节点数据的键和值。在如上确定出各个节点数据在对应数据分片中的节点数据片内索引后,数据记录单元1630基于各个节点数据在对应数据分片中的节点数据片内索引,将各个节点数据的节点标识和节点属性记录到对应数据分片中。
在一个示例中,待编码数据包括图数据的边表数据,边表数据的每个边数据包括起始图节点的节点标识、终止图节点的节点标识以及边属性。相应地,数据编码装置1600还包括第一数据更新单元(未示出)。第一数据更新单元被配置为在对边表数据的各个边数据进行数据分片之前,通过下述过程对边表数据中的边数据进行数据更新:针对每条边,分别基于该边的起始图节点的节点标识和终止图节点的节点标识进行节点分片,确定起始图节点和终止图节点所在节点分片的节点分片标识,各个节点分片的节点分片标识基于对应节点标识的一致性哈希值确定,以及分别使用点表数据编码时的完美哈希因子文件中的对应完美哈希因子计算起始图节点的节点标识的完美哈希值以及终止图节点的节点标识的完美哈希值,确定起始图节点和终止图节点在所在节点分片中的节点数据片内索引;分别将各个起始图节点的节点分片标识和节点数据片内索引组合以及将各个终止图节点的节点分片标识和节点数据片内索引组合,得到各个起始图节点的全局节点标识和各个终止图节点的全局节点标识;以及针对每条边,将起始图节点的全局节点标识和终止图节点的全局节点标识组合为该边的边标识。在进行数据编码时,更新后的边数据的边标识充当边数据的键,以及边属性充当边数据的值。
在得到各个边数据在对应边数据分片中的边数据片内索引后,数据记录单元1630基于各个边数据在对应边数据分片中的边数据片内索引,将各个边数据的边标识以及边属性记录到对应边数据分片中。
在一些实施例中,数据记录单元1630可以基于各个更新后的边数据在对应边数据分片中的边数据片内索引,将各个更新后的边数据的边属性记录到对应边数据分片中,而不记录各个更新后的边数据中的边标识。
在一个示例中,待编码数据包括图数据的邻居表数据,每个邻居数据包括起始图节点的节点标识以及所有终止图节点的节点标识。相应地,数据编码装置1600还包括第二数据更新单元(未示出)。第二数据更新单元被配置为通过下述过程将所有终止图节点的节点标识更新为全局节点标识:针对每个终止图节点,基于对该终止图节点的节点标识进行节点分片,确定该终止图节点所在节点分片的节点分片标识,所述节点分片标识基于该终止图节点的节点标识的一致性哈希值确定,使用点表数据编码时的完美哈希因子文件中的对应完美哈希因子计算该终止图节点的节点标识的完美哈希值,确定该终止图节点在所在节点分片中的节点数据片内索引;以及将该终止图节点的节点分片标识和节点数片内索引组合,得到该终止图节点的全局节点标识。在进行数据编码时,起始图节点的节点标识充当邻居数据的键,以及所有终止图节点的全局节点标识充当邻居数据的值。
在得到各个邻居数据在对应邻居数据分片中的邻居数据片内索引后,数据记录单元1630基于各个邻居数据在对应邻居数据分片中的邻居数据片内索引,将各个邻居数据的起始图节点的节点标识以及所有终止图节点的全局节点标识记录到对应邻居数据分片中。
图18示出了根据本说明书的实施例的图数据存储装置1800的示例方框图。如图18所示,图数据存储装置1800包括点表数据编码单元1810、边表数据编码单元1820、邻居表数据编码单元1830和数据存储单元1840。
点表数据编码单元1810被配置为按照如上所述的点表数据编码方法对点表数据进行数据编码,以生成节点数据分片文件以及对应的完美哈希因子文件。
边表数据编码单元1820被配置为按照如上所述的边表数据编码方法对边表数据进行数据编码,以生成边数据分片文件以及对应的完美哈希因子文件。
邻居表数据编码单元1830被配置为按照如上所述的邻居表数据编码方法对邻居表数据进行数据编码,以生成邻居数据分片文件以及对应的完美哈希因子文件。
数据存储单元1840被配置为将所生成的节点数据分片文件以及对应的完美哈希因子文件、边数据分片文件以及对应的完美哈希因子文件和邻居数据分片文件以及对应的完美哈希因子文件分别存储到点表服务器、边表服务器和邻居表服务器。
图19示出了根据本说明书的实施例的图数据查询装置1900的示例方框图。如图19所示,图数据查询装置1900包括邻居数据查询单元1910、节点数据查询单元1920、边数据查询单元1930和查询数据提供单元1940。
邻居数据查询单元1910被配置为响应于接收到来自用户的图数据查询请求,基于所述图数据查询请求中的待查询图节点的节点标识向邻居表服务器发起节点标识查询,得到待查询图节点的全局节点标识以及所有邻居图节点的全局节点标识。邻居数据查询单元1910的操作可以参考上面参照图10的1010描述的操作。
节点数据查询单元1920被配置为基于各个邻居图节点的全局节点标识向点表服务器发起节点数据查询,得到所有邻居图节点的节点数据。节点数据查询单元1920的操作可以参考上面参照图10的1020描述的操作。
边数据查询单元1930被配置为基于待查询图节点的全局节点标识以及各个邻居图节点的全局节点标识向边表服务器发起边数据查询,得到待查询图节点的边数据。边数据查询单元1930的操作可以参考上面参照图10的1030描述的操作。
查询数据提供单元1940被配置为将待查询图节点的边数据以及所有邻居图节点的节点数据提供给用户。查询数据提供单元1940的操作可以参考上面参照图10的1040描述的操作。
图20示出了根据本说明书的实施例的邻居数据查询单元1910的示例方框图。如图20所示,邻居数据查询单元1910包括分片标识确定模块1911、节点标识查询请求发送模块1913和节点标识接收模块1915。
分片标识确定模块1911被配置为对待查询图节点的节点标识进行一致性哈希计算,确定邻居数据分片的邻居数据分片标识。
节点标识查询请求发送模块1913被配置为向邻居数据分片标识所标识的邻居表服务器发送节点标识查询请求,所示节点标识查询请求包括待查询图节点的节点标识。
在接收到节点标识查询请求后,在邻居表服务器处,获取邻居数据分片对应的完美哈希因子文件,并根据完美哈希因子与节点标识之间的对应关系,从完美哈希因子文件中获取与待查询图节点的节点标识对应的完美哈希因子。随后,在邻居表服务器处,使用所获取的完美哈希因子计算待查询图节点的节点标识的完美哈希值,从而得到邻居数据片内索引,所述邻居数据片内索引用于索引邻居数据在邻居数据分片中的记录位置(哈希槽位或哈希索引位置)。然后,在邻居表服务器处,从邻居表服务器的邻居数据分片中邻居数据片内索引所索引的记录位置处获取所有邻居图节点的全局节点标识。此外,在邻居表服务器处,组合邻居数据分片的邻居数据分片标识以及邻居数据片内索引,得到待查询图节点的全局节点标识。
节点标识接收模块1915被配置为接收邻居表服务器响应于节点标识查询请求而返回的待查询图节点的全局节点标识以及所有邻居图节点的全局节点标识。
图21示出了根据本说明书的实施例的节点数据查询单元1920的示例方框图。如图21所示,节点数据查询单元1920包括全局节点标识处理模块1921、节点数据查询请求发送模块1923和节点数据接收模块1925。
全局节点标识处理模块1921被配置为对各个邻居图节点的全局节点标识进行解组合,得到各个邻居图节点所在节点数据分片的节点数据分片标识以及各个邻居图节点的节点数据片内索引。
节点数据查询请求发送模块1923被配置为基于各个邻居图节点的节点数据分片标识,向各个邻居图节点的节点数据分片标识所标识的点表服务器发起针对各个邻居图节点的节点数据查询请求,所述节点数据查询请求包括对应邻居图节点的节点数据片内索引。响应于接收到节点数据查询请求,点表服务器基于节点数据片内索引从节点数据分片中获取各个邻居图节点的节点数据。
节点数据接收模块1925被配置为接收点表服务器响应于节点数据查询请求而返回的各个邻居图节点的节点数据。
图22示出了根据本说明书的实施例的边数据查询单元1930的示例方框图。如图22所示,边数据查询单元1930包括边标识生成模块1931、分片标识确定模块1933、边数据查询请求发送模块1935和边数据接收模块1937。
边标识生成单元1931被配置为将待查询图节点的全局节点标识与各个邻居图节点的全局节点标识分别进行组合,得到各个边的边标识。
分片标识确定模块1933被配置为对所得到的各个边的边标识进行一致性哈希计算,确定各个边所在边数据分片的边数据分片标识。
边数据查询请求发送模块1935被配置为向各个边数据分片标识所标识的边表服务器发送边数据查询请求,所述边数据查询请求包括边标识。
响应于接收到边数据查询请求,在边表服务器处,从完美哈希因子文件中获取与边标识对应的完美哈希因子,并且使用该完美哈希因子计算边标识的完美哈希值得到边数据片内索引,所述边数据片内索引用于索引边数据在边数据分片中的记录位置(哈希槽位或哈希索引位置)。接着,在边表服务器处,基于边数据片内索引从边数据分片中获取待查询图节点的边数据。
边数据接收模块1937被配置为接收边表服务器响应于边数据查询请求而返回的待查询图节点的边数据。
如上参照图1到图22,对根据本说明书实施例的数据编码方法、数据编码装置、图数据存储方法、图数据存储装置、图数据查询方法以及图数据查询装置进行了描述。上面的数据编码装置、图数据存储装置和图数据查询装置可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。
图23示出了根据本说明书的实施例的基于计算机系统实现的数据编码装置2300的示意图。如图23所示,数据编码装置2300可以包括至少一个处理器2310、存储器(例如,非易失性存储器)2320、内存2330和通信接口2340,并且至少一个处理器2310、存储器2320、内存2330和通信接口2340经由总线2360连接在一起。至少一个处理器2310执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
在一个实施例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器2310:基于数据记录的键值对中的键对待编码数据的各个数据记录进行数据分片,所得到的各个数据分片的分片标识基于该数据分片中的数据记录的键的一致性哈希值确定;针对各个数据分片,通过使用完美哈希算法对该数据分片中的各个数据记录的键值对中的键进行完美哈希计算,确定各个数据记录在该数据分片中的片内索引;基于待编码数据的各个数据记录在对应数据分片中的片内索引,将各个数据记录的键值对记录到对应数据分片;以及针对记录有数据记录的每个数据分片,分别生成数据分片文件以及对应的完美哈希因子文件。
应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器2310进行本说明书的各个实施例中以上结合图1-图8以及图16-图17描述的各种操作和功能。
图24示出了根据本说明书的实施例的基于计算机系统实现的图数据存储装置2400的示意图。如图24所示,图数据存储装置2400可以包括至少一个处理器2410、存储器(例如,非易失性存储器)2420、内存2430和通信接口2440,并且至少一个处理器2410、存储器2420、内存2430和通信接口2440经由总线2460连接在一起。至少一个处理器2410执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
在一个实施例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器2410:按照如上所述的数据编码方法对点表数据进行数据编码,以生成节点数据分片文件和对应的完美哈希因子文件;按照如上所述的数据编码方法对边表数据进行数据编码,以生成边数据分片文件和对应的完美哈希因子文件;按照如上所述的数据编码方法对邻居表数据进行数据编码,以生成邻居数据分片文件和对应的完美哈希因子文件;以及将节点数据分片文件和对应的完美哈希因子文件、边数据分片文件和对应的完美哈希因子文件、以及邻居数据分片文件和对应的完美哈希因子文件分别存储到点表服务器、边表服务器和邻居表服务器。
应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器2410执行本说明书的各个实施例中以上结合图9以及图18描述的各种操作和功能。
图25示出了根据本说明书的实施例的基于计算机系统实现的图数据查询装置2500的示意图。如图25所示,图数据查询装置2500可以包括至少一个处理器2510、存储器(例如,非易失性存储器)2520、内存2530和通信接口2540,并且至少一个处理器2510、存储器2520、内存2530和通信接口2540经由总线2560连接在一起。至少一个处理器2510执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
在一个实施例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器2510:响应于接收到来自用户的图数据查询请求,基于图数据查询请求中的待查询图节点的节点标识向邻居表服务器发起节点标识查询,得到待查询图节点的全局节点标识以及所有邻居图节点的全局节点标识;基于各个邻居图节点的全局节点标识向点表服务器发起节点数据查询,得到所有邻居图节点的节点数据;基于待查询图节点的全局节点标识以及各个邻居图节点的全局节点标识向边表服务器发起边数据查询,得到待查询图节点的边数据;以及将待查询图节点的边数据以及所有邻居图节点的节点数据提供给用户。
应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器2510执行本说明书的各个实施例中以上结合图10-图15以及图19-图22描述的各种操作和功能。
根据一个实施例,提供了一种比如机器可读介质(例如,非暂时性机器可读介质)的程序产品。机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本说明书的各个实施例中以上结合图1-图22描述的各种操作和功能。具体地,可以提供配有可读存储介质的系统或者装置,在该可读存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机或处理器读出并执行存储在该可读存储介质中的指令。
在这种情况下,从可读介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的可读存储介质构成了本发明的一部分。
可读存储介质的实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD-RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上或云上下载程序代码。
根据一个实施例,提供一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序当被处理器执行时,使得处理器执行本说明书的各个实施例中以上结合图1-图22描述的各种操作和功能。
本领域技术人员应当理解,上面公开的各个实施例可以在不偏离发明实质的情况下做出各种变形和修改。因此,本发明的保护范围应当由所附的权利要求书来限定。
需要说明的是,上述各流程和各系统结构图中不是所有的步骤和单元都是必须的,可以根据实际的需要忽略某些步骤或单元。各步骤的执行顺序不是固定的,可以根据需要进行确定。上述各实施例中描述的装置结构可以是物理结构,也可以是逻辑结构,即,有些单元可能由同一物理实体实现,或者,有些单元可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。
以上各实施例中,硬件单元或模块可以通过机械方式或电气方式实现。例如,一个硬件单元、模块或处理器可以包括永久性专用的电路或逻辑(如专门的处理器,FPGA或ASIC)来完成相应操作。硬件单元或处理器还可以包括可编程逻辑或电路(如通用处理器或其它可编程处理器),可以由软件进行临时的设置以完成相应操作。具体的实现方式(机械方式、或专用的永久性电路、或者临时设置的电路)可以基于成本和时间上的考虑来确定。
上面结合附图阐述的具体实施方式描述了示例性实施例,但并不表示可以实现的或者落入权利要求书的保护范围的所有实施例。在整个本说明书中使用的术语“示例性”意味着“用作示例、实例或例示”,并不意味着比其它实施例“优选”或“具有优势”。出于提供对所描述技术的理解的目的,具体实施方式包括具体细节。然而,可以在没有这些具体细节的情况下实施这些技术。在一些实例中,为了避免对所描述的实施例的概念造成难以理解,公知的结构和装置以框图形式示出。
本公开内容的上述描述被提供来使得本领域任何普通技术人员能够实现或者使用本公开内容。对于本领域普通技术人员来说,对本公开内容进行的各种修改是显而易见的,并且,也可以在不脱离本公开内容的保护范围的情况下,将本文所定义的一般性原理应用于其它变型。因此,本公开内容并不限于本文所描述的示例和设计,而是与符合本文公开的原理和新颖性特征的最广范围相一致。

Claims (30)

1.一种基于完美哈希的数据编码方法,包括:
通过对待编码数据的各个数据记录的键值对中的键进行一致性哈希计算,将待编码数据的数据记录分片为多个数据分片,所得到的各个数据分片的分片标识基于该数据分片中的数据记录的键的一致性哈希值确定;
针对各个数据分片,通过使用完美哈希算法对该数据分片中的各个数据记录的键值对中的键进行完美哈希计算,确定各个数据记录在该数据分片中的片内索引;
基于所述待编码数据的各个数据记录在对应数据分片中的片内索引,将各个数据记录的键值对记录到对应数据分片;以及
针对记录有数据记录的每个数据分片,分别生成数据分片文件以及对应的完美哈希因子文件,所述完美哈希因子文件包括该数据分片中的各个数据记录进行完美哈希计算时使用的完美哈希因子,并且完美哈希因子与数据记录之间具有对应关系。
2.如权利要求1所述的数据编码方法,其中,基于数据记录的键值对中的键对待编码数据的各个数据记录进行数据分片包括:
对待编码数据中的各个数据记录的键值对中的键进行一致性哈希计算;
对各个数据记录的一致性哈希值进行以数据分片数量为模数的取模处理;以及
将取模结果相同的数据记录划分到同一数据分片,各个数据分片的分片标识基于对应的取模结果确定。
3.如权利要求1所述的数据编码方法,其中,所述待编码数据包括图数据的点表数据,所述点表数据的每个节点数据中的图节点的节点标识和节点属性在数据编码时分别充当该节点数据的键和值,基于所述待编码数据的各个数据记录在对应数据分片中的分片索引,将各个数据记录的键值对记录到对应数据分片包括:
基于各个节点数据在对应数据分片中的节点数据片内索引,将各个节点数据的节点标识和节点属性记录到对应数据分片。
4.如权利要求1所述的数据编码方法,其中,所述待编码数据包括图数据的边表数据,所述边表数据的每个边数据包括起始图节点的节点标识、终止图节点的节点标识以及边属性,
在对所述边表数据的各个边数据进行数据分片之前,所述数据编码方法还包括:
通过下述过程对所述边表数据中的边数据进行数据更新:
针对每条边,分别基于起始图节点的节点标识和终止图节点的节点标识进行节点分片,确定起始图节点和终止图节点所在节点分片的节点分片标识,各个节点分片的节点分片标识基于对应节点标识的一致性哈希值确定,以及分别使用点表数据编码时的完美哈希因子文件中的对应完美哈希因子计算起始图节点的节点标识的完美哈希值以及终止图节点的节点标识的完美哈希值,确定起始图节点和终止图节点在所在节点分片中的片内索引;
分别将各个起始图节点的节点分片标识和片内索引组合以及将各个终止图节点的节点分片标识和片内索引组合,得到各个起始图节点的全局节点标识和各个终止图节点的全局节点标识;以及
针对每条边,将起始图节点的全局节点标识和终止图节点的全局节点标识组合为边标识,其中,边标识在数据编码时充当边数据的键,以及边属性在数据编码时充当边数据的值。
5.如权利要求4所述的数据编码方法,其中,基于所述待编码数据的各个数据记录在对应数据分片中的片内索引,将各个数据记录的键值对记录到对应数据分片包括:
基于各个更新后的边数据在对应边数据分片中的边数据片内索引,将各个更新后的边数据的边属性存储到对应边数据分片。
6.如权利要求1所述的数据编码方法,其中,所述待编码数据包括图数据的邻居表数据,所述邻居表数据的每个邻居数据包括起始图节点的节点标识以及所有终止图节点的节点标识,
所述数据编码方法还包括:
通过下述过程将所有终止图节点的节点标识更新为全局节点标识:
针对每个终止图节点,
基于该终止图节点的节点标识进行节点分片,确定该终止图节点所在节点分片的节点分片标识,所述节点分片标识基于该终止图节点的节点标识的一致性哈希值确定,
使用点表数据编码时生成的完美哈希因子文件中的对应完美哈希因子计算该终止图节点的节点标识的完美哈希值,确定该终止图节点在所在节点分片中的片内索引;以及
将该终止图节点的节点分片标识和片内索引组合,得到该终止图节点的全局节点标识,其中,邻居数据中的起始图节点的节点标识在数据编码时充当邻居数据的键,以及邻居数据中的所有终止图节点的全局节点标识在数据编码时充当邻居数据的值,
基于所述待编码数据的各个数据记录在对应数据分片中的片内索引,将各个数据记录的键值对记录到对应数据分片包括:
基于各个邻居数据在对应邻居数据分片中的邻居数据片内索引,将各个邻居数据的起始图节点的节点标识以及所有终止图节点的全局节点标识记录到对应邻居数据分片。
7.如权利要求6所述的数据编码方法,其中,所有终止图节点的全局节点标识采用整数表征并且按照升序记录到对应邻居数据分片,以及所述全局节点标识按照增量变长整数编码方式记录。
8.一种基于完美哈希的图数据存储方法,所述图数据包括点表数据、边表数据和邻居表数据,所述图数据存储方法包括:
按照如权利要求3所述的数据编码方法对点表数据进行数据编码,以生成节点数据分片文件和对应的完美哈希因子文件;
按照如权利要求4或5所述的数据编码方法对边表数据进行数据编码,以生成边数据分片文件和对应的完美哈希因子文件;
按照如权利要求6或7所述的数据编码方法对邻居表数据进行数据编码,以生成邻居数据分片文件和对应的完美哈希因子文件;以及
将所述节点数据分片文件和对应的完美哈希因子文件、所述边数据分片文件和对应的完美哈希因子文件、以及邻居数据分片文件和对应的完美哈希因子文件分别存储到点表服务器、边表服务器和邻居表服务器。
9.一种基于完美哈希的图数据查询方法,图数据按照如权利要求8所述的图数据存储方法存储到点表服务器、边表服务器和邻居表服务器,所述图数据查询方法包括:
响应于接收到来自用户的图数据查询请求,基于所述图数据查询请求中的待查询图节点的节点标识向邻居表服务器发起节点标识查询,得到所述待查询图节点的全局节点标识以及所有邻居图节点的全局节点标识;
基于各个邻居图节点的全局节点标识向点表服务器发起节点数据查询,得到所有邻居图节点的节点数据;
基于所述待查询图节点的全局节点标识以及各个邻居图节点的全局节点标识向边表服务器发起边数据查询,得到所述待查询图节点的边数据;以及
将所述待查询图节点的边数据以及所有邻居图节点的节点数据提供给所述用户。
10.如权利要求9所述的图数据查询方法,其中,将所述待查询图节点的边数据以及所有邻居图节点的节点数据提供给所述用户包括:
将所述待查询图节点的边数据以及所有邻居图节点的节点数据组装成图结构数据提供给所述用户。
11.如权利要求9所述的图数据查询方法,其中,在进行图数据查询之前,所述节点数据分片文件、边数据分片文件、邻居数据分片文件以及对应的完美哈希因子文件被加载到对应数据服务器的内存中。
12.如权利要求9所述的图数据查询方法,其中,基于所述图数据查询请求中的待查询图节点的节点标识向邻居表服务器发起节点标识查询,得到所述待查询图节点的全局节点标识以及所有终止图节点的全局节点标识包括:
对所述待查询图节点的节点标识进行一致性哈希计算,确定邻居数据分片的邻居数据分片标识;
向所述邻居数据分片标识所标识的邻居表服务器发送节点标识查询请求,所述节点标识查询请求包括所述待查询图节点的节点标识;以及
接收所述邻居表服务器响应于所述节点标识查询请求而返回的所述待查询图节点的全局节点标识以及所有邻居图节点的全局节点标识,
其中,所有邻居图节点的全局节点标识通过从所述邻居表服务器的邻居数据分片文件中邻居数据片内索引所索引的记录位置处获取,所述邻居数据片内索引通过使用完美哈希因子文件中的对应完美哈希因子计算所述待查询图节点的节点标识的完美哈希值得到,以及所述待查询图节点的全局节点标识通过组合所述邻居数据分片的邻居数据分片标识以及所述邻居数据片内索引得到。
13.如权利要求12所述的图数据查询方法,其中,基于各个邻居图节点的全局节点标识向点表服务器发起节点数据查询,得到所有邻居图节点的节点数据包括:
对各个邻居图节点的全局节点标识进行解组合,得到各个邻居图节点所在节点数据分片的节点数据分片标识以及邻居图节点的节点数据片内索引;
基于各个邻居图节点的节点数据分片标识,向各个邻居图节点的节点数据分片标识所标识的点表服务器发起针对各个邻居图节点的节点数据查询请求,所述节点数据查询请求包括对应邻居图节点的节点数据片内索引;以及
接收所述点表服务器响应于所述节点数据查询请求而返回的各个邻居图节点的节点数据,
其中,所述邻居图节点的节点数据由所述点表服务器基于所述节点数据片内索引从节点数据分片文件中获取。
14.如权利要求12所述的图数据查询方法,其中,基于所述待查询图节点的全局节点标识以及各个邻居图节点的全局节点标识向边表服务器发起边数据查询,得到所述待查询图节点的边数据包括:
将所述待查询图节点的全局节点标识与各个邻居图节点的全局节点标识分别进行组合,得到各个边的边标识;
对各个边的边标识进行一致性哈希计算,确定各个边所在边数据分片的边数据分片标识;
向所确定的边数据分片标识所标识的边表服务器发送边数据查询请求,所述边数据查询请求包括边标识;以及
接收所述边表服务器响应于所述边数据查询请求而返回的所述待查询图节点的边数据,
其中,所述待查询图节点的边数据基于边数据片内索引从所述边表服务器的边数据分片文件中获取,所述边数据片内索引通过使用完美哈希因子文件中的对应完美哈希因子计算所述边标识的完美哈希值得到。
15.一种基于完美哈希的数据编码装置,包括:
数据分片单元,通过对待编码数据的各个数据记录的键值对中的键进行一致性哈希计算,将待编码数据的数据记录分片为多个数据分片,所得到的各个数据分片的分片标识基于该数据分片中的数据记录的键的一致性哈希值确定;
片内索引确定单元,针对各个数据分片,通过使用完美哈希算法对该数据分片中的各个数据记录的键值对中的键进行完美哈希计算,确定各个数据记录在该数据分片中的片内索引;
数据记录单元,基于所述待编码数据的各个数据记录在对应数据分片中的片内索引,将各个数据记录的键值对记录到对应数据分片;以及
文件生成单元,针对记录有数据记录的每个数据分片,分别生成数据分片文件以及对应的完美哈希因子文件,所述完美哈希因子文件包括该数据分片中的各个数据记录进行完美哈希计算时使用的完美哈希因子,并且完美哈希因子与数据记录之间具有对应关系。
16.如权利要求15所述的数据编码装置,其中,所述数据分片单元包括:
哈希计算模块,对待编码数据中的各个数据记录的键值对中的键进行一致性哈希计算;
取模处理模块,对各个数据记录的一致性哈希值进行以数据分片数量为模数的取模处理;以及
数据分片模块,将取模结果相同的数据记录划分到同一数据分片,各个数据分片的分片标识基于对应的取模结果确定。
17.如权利要求15所述的数据编码装置,其中,所述待编码数据包括图数据的点表数据,所述点表数据的每个节点数据中的图节点的节点标识和节点属性在数据编码时分别充当该节点数据的键和值,所述数据记录单元基于各个节点数据在对应数据分片中的片内索引,将各个节点数据的节点标识和节点属性记录到对应数据分片。
18.如权利要求15所述的数据编码装置,其中,所述待编码数据包括图数据的边表数据,所述边表数据的每个边数据包括起始图节点的节点标识、终止图节点的节点标识以及边属性,
所述数据编码装置还包括:
第一数据更新单元,在对所述边表数据的各个边数据进行数据分片之前,通过下述过程对所述边表数据中的边数据进行数据更新:
针对每条边,分别基于该边的起始图节点和终止图节点的节点标识进行节点分片,确定起始图节点和终止图节点所在节点分片的节点分片标识,各个节点分片的节点分片标识基于对应节点标识的一致性哈希值确定,以及分别使用点表数据编码时的完美哈希文件中的对应完美哈希因子计算起始图节点的节点标识的完美哈希值以及终止图节点的节点标识的完美哈希值,确定起始图节点和终止图节点在所在节点分片中的节点数据片内索引;
分别将各个起始图节点的节点分片标识和节点数据片内索引组合以及将各个终止图节点的节点分片标识和节点数据片内索引组合,得到各个起始图节点的全局节点标识和各个终止图节点的全局节点标识;以及
针对每条边,将起始图节点的全局节点标识和终止图节点的全局节点标识组合为该边的边标识,其中,边标识在数据编码时充当边数据的键,以及边属性在数据编码时充当边数据的值。
19.如权利要求18所述的数据编码装置,其中,所述数据记录单元基于各个更新后的边数据在对应边数据分片中的边数据片内索引,将各个更新后的边数据的边属性记录到对应边数据分片中。
20.如权利要求15所述的数据编码装置,其中,所述待编码数据包括图数据的邻居表数据,所述邻居表数据的每个邻居数据包括起始图节点的节点标识以及所有终止图节点的节点标识,
所述数据编码装置还包括:
第二数据更新单元,通过下述过程将所有终止图节点的节点标识更新为全局节点标识:
针对每个终止图节点,
基于该终止图节点的节点标识进行节点分片,确定该终止图节点所在节点分片的节点分片标识,所述节点分片标识基于该终止图节点的节点标识的一致性哈希值确定,
使用点表数据编码时的完美哈希文件中的对应完美哈希因子计算该终止图节点的节点标识的完美哈希值,确定该终止图节点在所在节点分片中的节点数据片内索引;以及
将该终止图节点的节点分片标识和节点数片内索引组合,得到该终止图节点的全局节点标识,其中,邻居数据中的起始图节点的节点标识在数据编码时充当邻居数据的键,以及邻居数据中的所有终止图节点的全局节点标识在数据编码时充当邻居数据的值,
所述数据记录单元基于各个邻居数据在对应邻居数据分片中的邻居数据片内索引,将各个邻居数据的起始图节点的节点标识以及所有终止图节点的全局节点标识记录到对应邻居数据分片中。
21.一种基于完美哈希的图数据存储装置,包括:
点表数据编码单元,按照如权利要求3所述的数据编码方法对点表数据进行数据编码,以生成节点数据分片文件以及对应的完美哈希因子文件;
边表数据编码单元,按照如权利要求4或5所述的数据编码方法对边表数据进行数据编码,以生成边数据分片文件以及对应的完美哈希因子文件;
邻居表数据编码单元,按照如权利要求6或7所述的数据编码方法对邻居表数据进行数据编码,以生成邻居数据分片文件以及对应的完美哈希因子文件;以及
数据存储单元,将所生成的节点数据分片文件以及对应的完美哈希因子文件、边数据分片文件以及对应的完美哈希因子文件和邻居数据分片文件以及对应的完美哈希因子文件分别存储到点表服务器、边表服务器和邻居表服务器。
22.一种基于完美哈希的图数据查询装置,图数据按照如权利要求8所述的图数据存储方法存储到点表服务器、边表服务器和邻居表服务器中,所述图数据查询装置包括:
邻居数据查询单元,响应于接收到来自用户的图数据查询请求,基于所述图数据查询请求中的待查询图节点的节点标识向邻居表服务器发起节点标识查询,得到所述待查询图节点的全局节点标识以及所有邻居图节点的全局节点标识;
节点数据查询单元,基于各个邻居图节点的全局节点标识向点表服务器发起节点数据查询,得到所有邻居图节点的节点数据;
边数据查询单元,基于所述待查询图节点的全局节点标识以及各个邻居图节点的全局节点标识向边表服务器发起边数据查询,得到所述待查询图节点的边数据;以及
查询数据提供单元,将所述待查询图节点的边数据以及所有邻居图节点的节点数据提供给所述用户。
23.如权利要求22所述的图数据查询装置,其中,所述邻居数据查询单元包括:
分片标识确定模块,对所述待查询图节点的节点标识进行一致性哈希计算,确定邻居数据分片的邻居数据分片标识;
节点标识查询请求发送模块,向所述邻居数据分片标识所标识的邻居表服务器发送节点标识查询请求,所述节点标识查询请求包括所述待查询图节点的节点标识;以及
节点标识接收模块,接收所述邻居表服务器响应于所述节点标识查询请求而返回的所述待查询图节点的全局节点标识以及所有邻居图节点的全局节点标识,
其中,所有邻居图节点的全局节点标识通过从所述邻居表服务器的邻居数据分片文件中邻居数据片内索引所索引的记录位置处获取,所述邻居数据片内索引通过使用完美哈希文件中的对应完美哈希因子计算所述待查询图节点的节点标识的完美哈希值得到,以及所述待查询图节点的全局节点标识通过组合所述邻居数据分片标识以及所述邻居数据片内索引得到。
24.如权利要求23所述的图数据查询装置,其中,所述节点数据查询单元包括:
全局节点标识处理模块,对各个邻居图节点的全局节点标识进行解组合,得到各个邻居图节点所在节点数据分片的节点数据分片标识以及各个邻居图节点的节点数据片内索引;
节点数据查询请求发送模块,基于各个邻居图节点的节点数据分片标识,向各个邻居图节点的节点数据分片标识所标识的点表服务器发起针对各个邻居图节点的节点数据查询请求,所述节点数据查询请求包括对应邻居图节点的节点数据片内索引;以及
节点数据接收模块,接收所述点表服务器响应于所述节点数据查询请求而返回的各个邻居图节点的节点数据,
其中,所述邻居图节点的节点数据由所述点表服务器基于所述节点数据片内索引从对应的节点数据分片文件中获取。
25.如权利要求23所述的图数据查询装置,其中,所述边数据查询单元包括:
边标识生成单元,将所述待查询图节点的全局节点标识与各个邻居图节点的全局节点标识分别进行组合,得到各个边的边标识;
分片标识确定模块,对所得到的各个边的边标识进行一致性哈希计算,确定各个边所在边数据分片的边数据分片标识;
边数据查询请求发送模块,向各个边数据分片标识所标识的边表服务器发送边数据查询请求,所述边数据查询请包括边标识;以及
边数据接收模块,接收所述边表服务器响应于所述边数据查询请求而返回的所述待查询图节点的边数据,
其中,所述待查询图节点的边数据基于边数据片内索引从所述邻居表服务器的边数据分片文件中获取,所述边数据片内索引通过使用完美哈希文件中的对应完美哈希因子计算所述边标识的完美哈希值得到。
26.一种图数据库系统,包括:
如权利要求21所述的图数据存储装置;
如权利要求22到25中任一所述的图数据查询装置;以及
数据服务器,包括点表服务器、边表服务器和邻居表服务器。
27.一种数据编码装置,包括:
至少一个处理器,
与所述至少一个处理器耦合的存储器,以及
存储在所述存储器中的计算机程序,所述至少一个处理器执行所述计算机程序来实现如权利要求1到7中任一所述的数据编码方法。
28.一种图数据存储装置,包括:
至少一个处理器,
与所述至少一个处理器耦合的存储器,以及
存储在所述存储器中的计算机程序,所述至少一个处理器执行所述计算机程序来实现如权利要求8所述的图数据存储方法。
29.一种图数据查询装置,包括:
至少一个处理器,
与所述至少一个处理器耦合的存储器,以及
存储在所述存储器中的计算机程序,所述至少一个处理器执行所述计算机程序来实现如权利要求9到14中任一所述的图数据查询方法。
30.一种计算机可读存储介质,其存储有可执行指令,所述指令当被执行时使得处理器执行如权利要求1到7中任一所述的数据编码方法、执行如权利要求8所述的图数据存储方法、或者执行如权利要求9到14中任一所述的图数据查询方法。
CN202111204226.XA 2021-10-15 2021-10-15 数据编码方法、图数据存储方法、图数据查询方法及装置 Active CN113641841B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111204226.XA CN113641841B (zh) 2021-10-15 2021-10-15 数据编码方法、图数据存储方法、图数据查询方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111204226.XA CN113641841B (zh) 2021-10-15 2021-10-15 数据编码方法、图数据存储方法、图数据查询方法及装置

Publications (2)

Publication Number Publication Date
CN113641841A CN113641841A (zh) 2021-11-12
CN113641841B true CN113641841B (zh) 2022-02-22

Family

ID=78427107

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111204226.XA Active CN113641841B (zh) 2021-10-15 2021-10-15 数据编码方法、图数据存储方法、图数据查询方法及装置

Country Status (1)

Country Link
CN (1) CN113641841B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114791968A (zh) * 2022-06-27 2022-07-26 杭州连通图科技有限公司 用于图计算的处理方法、装置、系统及计算机可读介质
CN115982414B (zh) * 2022-12-16 2023-07-25 清华大学 一种图数据处理与增量存储方法、装置及计算机设备
CN116450656B (zh) * 2023-06-16 2023-08-22 北京数巅科技有限公司 数据处理方法、装置、设备及存储介质
CN117540056A (zh) * 2024-01-09 2024-02-09 腾讯科技(深圳)有限公司 数据查询的方法、装置、计算机设备和存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112732650A (zh) * 2020-12-31 2021-04-30 中国工商银行股份有限公司 文件分片方法及装置
CN113407550A (zh) * 2021-08-19 2021-09-17 支付宝(杭州)信息技术有限公司 数据存储及查询方法、装置及数据库系统

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10515064B2 (en) * 2016-07-11 2019-12-24 Microsoft Technology Licensing, Llc Key-value storage system including a resource-efficient index
CN113051268A (zh) * 2021-03-19 2021-06-29 中国工商银行股份有限公司 数据查询方法、数据查询装置、电子设备及存储介质
CN113434518B (zh) * 2021-08-26 2021-12-03 西安热工研究院有限公司 时序数据库查询方法、系统、设备及存储介质

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112732650A (zh) * 2020-12-31 2021-04-30 中国工商银行股份有限公司 文件分片方法及装置
CN113407550A (zh) * 2021-08-19 2021-09-17 支付宝(杭州)信息技术有限公司 数据存储及查询方法、装置及数据库系统

Also Published As

Publication number Publication date
CN113641841A (zh) 2021-11-12

Similar Documents

Publication Publication Date Title
CN113641841B (zh) 数据编码方法、图数据存储方法、图数据查询方法及装置
CN113609347B (zh) 数据存储及查询方法、装置及数据库系统
Li et al. Compression of uncertain trajectories in road networks
CN104572727A (zh) 一种数据查询方法及装置
CN107786638B (zh) 一种数据处理方法、装置及系统
US20170031948A1 (en) File synchronization method, server, and terminal
CN113407550A (zh) 数据存储及查询方法、装置及数据库系统
CN114328545B (zh) 数据存储及查询方法、装置及数据库系统
US20220182241A1 (en) Short transaction identifier collision detection and reconciliation
Auvolat et al. Merkle search trees: Efficient state-based CRDTs in open networks
CN111177225B (zh) 账户状态存在性证明方法及装置和状态查询方法及装置
CN108399175B (zh) 一种数据存储、查询方法及其装置
CN113806302B (zh) 图状态数据管理方法及装置
CN107016548B (zh) 客户系统、信息处理方法和读写方法及装置
CN110958212B (zh) 一种数据压缩、数据解压缩方法、装置及设备
CN110807203B (zh) 数据处理方法、业务运营中心平台、系统以及存储介质
CN112148728A (zh) 用于信息处理的方法、设备和计算机程序产品
CN107526530B (zh) 数据处理方法和设备
CN110597466B (zh) 区块链节点的控制方法、装置、存储介质和计算机设备
CN112328601A (zh) 基于区块链的数据处理方法、装置、设备和存储介质
CN112817980A (zh) 一种数据索引处理方法、装置、设备及存储介质
US20240134911A1 (en) Data storage and querying
CN116303580A (zh) 数据查询方法、装置及数据库系统
Heo et al. Blockchain Data Storage Optimisations: A Comprehensive Survey
CN111506658B (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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40062627

Country of ref document: HK