CN117349477A - 一种基于持久化内存的图数据异构分层存储结构及其方法 - Google Patents
一种基于持久化内存的图数据异构分层存储结构及其方法 Download PDFInfo
- Publication number
- CN117349477A CN117349477A CN202311270531.8A CN202311270531A CN117349477A CN 117349477 A CN117349477 A CN 117349477A CN 202311270531 A CN202311270531 A CN 202311270531A CN 117349477 A CN117349477 A CN 117349477A
- Authority
- CN
- China
- Prior art keywords
- node
- persistent memory
- hierarchical
- heterogeneous
- key
- 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.)
- Pending
Links
- 230000002085 persistent effect Effects 0.000 title claims abstract description 97
- 238000000034 method Methods 0.000 title claims abstract description 34
- 230000004048 modification Effects 0.000 claims description 11
- 238000012986 modification Methods 0.000 claims description 11
- 230000008569 process Effects 0.000 claims description 11
- 238000013500 data storage Methods 0.000 claims description 8
- 230000006870 function Effects 0.000 claims description 8
- 238000013507 mapping Methods 0.000 claims description 8
- 230000001960 triggered effect Effects 0.000 claims description 5
- 238000007792 addition Methods 0.000 claims description 4
- 230000037430 deletion Effects 0.000 claims description 4
- 238000012217 deletion Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 12
- 230000008859 change Effects 0.000 description 9
- 238000004590 computer program Methods 0.000 description 7
- 238000012545 processing Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000002688 persistence Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2358—Change logging, detection, and notification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (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
本发明公开了一种基于持久化内存的图数据异构分层存储结构及其方法,本发明采用分层哈希表异构存储结构,存储图数据中的拓扑数据和索引数据中的等值查询数据结构,同时采用一个分层存储的B+Tree存储结构,存储索引数据中的范围查询数据结构,解决查询速度与内存空间有限的问题,同时通过将持久化内存的随机写转化为顺序写,减小写延迟,通过构建分层存储的架构,减少持久化内存中数据结构的写次数,提高查询效率。
Description
技术领域
本发明属于计算机软件技术领域,具体涉及一种基于持久化内存的图数据异构分层存储结构及其方法。
背景技术
在现有的图存储与查询技术中,对于数据的持久化与查询,通常是将数据持久化到磁盘中,采用懒加载或者全量加载的方式将数据加载到内存中进行计算后对客户端返回。如若通过磁盘存储数据,读取数据必然需要消耗大量的等待时间,懒加载方式将数据I/O的时间平摊到每次查询中,虽然有利于内存管理与限制内存使用,但是由于图计算的特性,Expand操作会让访问的边数据数量指数性增长,在少数次Expand操作后便有可能遍历全图数据,如果采用懒加载会让查询速度严重降低。而全量加载的方式是解决图查询延迟的重要方法,但是全量加载需要在程序运行初始化时将所有数据加载如内存中,会严重拖慢启动速度,同时由于内存空间通常较小,可能导致内存耗尽。因此,尝试将数据迁移至读写速度更高的可持久化设备是大势所趋,但是如果将内存中的数据结构照搬至持久化内存中,由于持久化内存中读写不对称,大量的写可能产生较严重的性能瓶颈。
发明内容
为了解决现有技术存在查询速度较慢、内存空间有限、或者持久化内存中大量的写可能产生较严重的性能瓶颈等问题,本发明提供了一种基于持久化内存的图数据异构分层存储结构及其方法,本发明采用分层哈希表异构存储结构,存储图数据中的拓扑数据和索引数据中的等值查询数据结构,同时采用一个分层存储的B+Tree存储结构,存储索引数据中的范围查询数据结构,解决查询速度与内存空间有限的问题,通过构建分层存储的架构,减少持久化内存中数据结构的写次数。
本发明通过下述技术方案实现:
一种基于持久化内存的图数据异构分层存储结构,所述图数据异构分层存储结构包括分层异构哈希表和分层异构B+树;
其中,图数据的拓扑数据和索引数据中的等值查询数据结构分别采用分层异构哈希表存储;
图数据的索引数据中的范围查询数据结构采用分层异构B+树存储。
现有的图存储与查询技术中,懒加载方式会让查询速度严重降低;全量加载方式需要在程序运行初始化时将所有数据加载入内存中,会严重拖慢启动速度,同时由于内存空间较小,可能导致内存耗尽;同时持久化内存中大量的写可能产生严重的性能瓶颈。而本发明提出的异构分层存储结构根据图数据的特性,通过构建分层异构哈希表存储拓扑数据与索引数据中的等值查询数据结构,并构建分层异构B+树存储索引数据中的范围查询数据结构,减少持久化内存中数据结构的写次数,提高查询速度。
作为优选实施方式,本发明的分层异构哈希表分为上层与下层,下层大小为上层大小的二分之一,即上层每两个桶对应下层的一个桶;
所述分层异构哈希表采用WAL日志进行增、删、改操作。
作为优选实施方式,本发明的每个桶包含8个键值对,当一个键写入到哈希表中时,首先查询当前桶中是否存在该键,如果不存在,则继续下层查询是否存在该键,不存在则直接进行写入,如果上层与下层的桶都写满,那么把下层置为暂存层,将上层置为下层,开始进行重哈希操作,新的上层大小分配为原上层的两倍,将暂存层的键重哈希至上层中。
作为优选实施方式,本发明的分层异构B+树采用DRAM和持久化内存分层存储,将B+树叶子层,即所有叶子节点存储在持久化内存中,上层节点则存储在DRAM中;
每个叶子节点存储16个256B的键值对,即每个叶子节点大小为4KB;
所述分层异构B+树采用WAL日志进行增、删、改操作。
作为优选实施方式,本发明当进行增、删、改操作时,先将修改的叶子节点写入DRAM中,将其父节点的指针指向DRAM,接着将该操作记入持久化内存的WAL日志中,启动一个定时应用日志的线程,将日志记录的操作通过事务应用至持久化内存中存储的叶子节点,当一个日志commit至持久化内存后,将DRAM中父节点的指针指向持久化内存中更新的节点。
作为优选实施方式,本发明的WAL日志大小为256字节,字段包括:2字节的CRC16校验码、1字节的操作类型OPTYPE、1字节的值字节长度VALUE_LEN、4字节的序列码SERIAL_NUM、8字节的键内容KEY_CONTENT、最大240字节的值内容VALUE_CONTENT;每条日志以增添方式写入日志尾端。
第二方面,本发明还提出了基于上述图数据异构分层存储结构的数据存储方法,所述数据存储方法包括:
图数据库进程启动时,所述分层异构B+树首先读取持久化内存中的叶子节点,并在DRAM中构建出B+树上层节点,底层指针指向持久化内存中的叶子节点;
当一个图拓扑及其节点属性导入时,首先构建两个分层异构哈希表,分别存储节点ID与其源边和目的边的映射,以及边ID与其源节点和目的节点的映射;
根据节点的属性类型,建立分层异构哈希表存储等值索引或建立分层异构B+树存储范围查询索引。
作为优选实施方式,本发明向分层异构哈希表写入数据时:
向DRAM哈希表写入键值对暂存;
同时将键值对写入存储在持久化内存中的WAL日志;
后台线程定时解析WAL日志,将修改变更到持久化内存哈希表中;
释放DRAM哈希表暂存键值对的空间;
向分层异构B+树写入数据时:
如果叶子节点空间足够,没有触发节点***或合并,则将持久化内存中对应写入的叶子节点拷贝入DRAM中,将值写入该叶子节点,将上层指针指向该叶子节点;如果叶子节点空间不足,则在DRAM中生成两个新的叶子节点,将上层指针指向这两个新的叶子节点;
将键值对写入存储在持久化内存中的WAL日志;
后台线程定时解析WAL日志,将修改变更到持久化内存的叶子节点;
释放DRAM中B+树暂存的叶子节点的空间。
第三方面,本发明还提出了基于上述图数据异构分层存储结构的数据查询方法,所述数据查询方法包括:
当需要访问分层异构哈希表时:
通过哈希函数计算出其hash_key;
在DRAM哈希表中查找,如果不存在该hash_key,则继续下一步,若存在该hash_key,判断是否标记为空,是则返回空,否则返回值;
在持久化内存哈希表中查找,如果存在该hash_key,则返回值,否则返回空。
作为优选实施方式,本发明的数据查询方法还包括:
当需要访问分层异构B+树时:
在根节点中二分查找大于键值的第一个值,若存在,则访问该节点对应的子节点,否则访问根节点最后一个子节点指针;
该子节点作为当前节点,在当前节点中二分查找大于键值的第一个值,若存在,则访问当前节点对应的子节点,否则访问当前节点最后一个子节点指针,循环当前操作,直到访问到叶子节点;
当获取到叶子节点指针时,如果指针位于DRAM中,则在DRAM中读取叶子节点,否则在持久化内存中读取叶子节点,通过二分查找判断是否存在键值,若存在,这返回值,否则返回空。
本发明与现有技术相比,具有如下的优点和有益效果:
1、本发明利用异构特性构建分层异构存储哈希表以及分层异构存储B+树,减少持久化内存的写延迟与写次数,利用DRAM与持久化内存的读速度加速查询;
2、本发明通过使用DRAM记录修改内容,以256字节为单位顺序写持久化WAL日志,将持久化内存的修改置于后台线程中刷写,利用DRAM记录的数据,极大地减少同时读写持久化内存导致的阻塞,同时利用分层哈希的性质,减少持久化内存的刷写次数,提高持久化内存寿命。
附图说明
此处所说明的附图用来提供对本发明实施例的进一步理解,构成本申请的一部分,并不构成对本发明实施例的限定。在附图中:
图1为本发明实施例的图拓扑与拓扑数据哈希表示意图;
图2为本发明实施例的分层异构B+树开机示意图;
图3为本发明实施例的分层异构哈希表写入数据示意图;
图4为本发明实施例的分层异构B+树写入数据示意图;
图5为本发明实施例的分层异构哈希表查询数据示意图;
图6为本发明实施例的分层异构哈希表查询流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明作进一步的详细说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为对本发明的限定。
实施例:
在现有的图存储与查询技术中,懒加载方式将数据I/O的时间平摊到每次查询中,虽然有利于内存管理与限制内存使用,但会让查询速度严重降低;全量加载方式需要在程序运行初始化时将所有数据加载入内存中,会严重拖慢启动速度,同时由于内存空间较小,可能导致内存耗尽;同时持久化内存中大量的写可能产生严重的性能瓶颈。基于此,本实施例提出了一种基于持久化内存的图数据异构分层存储结构,本实施例提出的异构分层存储结构根据图数据的特性,采用分层哈希表异构存储结构,存储图数据中的拓扑数据和索引数据中的等值查询数据结构,同时采用一个分层存储的B+Tree存储结构,存储索引数据中的范围查询数据结构,属性数据则仍使用LSM-Tree持久化至磁盘,解决查询速度与内存空间有限的问题,同时通过将持久化内存的随机写转化为顺序写,减小写延迟,通过构建分层存储的架构,减少持久化内存中数据结构的写次数,提高查询速度。
在图数据查询中,主要分为三种查询,第一种是需要利用图拓扑信息进行计算的拓扑数据查询,拓扑数据使用哈希表存储,通过节点/边id查询到该节点/边的拓扑数据;第二种为查询图节点的属性信息,由于属性信息会占据大量的存储空间,且属性信息只会在图查询的终点访问,因此本实施例将图属性信息使用LSM-Tree持久化至磁盘;最后一种是索引查询,索引查询分为两种,一种为等值查询,本实施例使用哈希表存储,另一种为范围查询,使用B+树存储。由于索引和拓扑查询在图查询中需要被频繁使用,同时所涉及的边与节点会随着expand次数指数增大,因此哈希表和B+树所占用的空间适合存储在持久化内存中,因此本实施例主要针对哈希表和B+树在持久化内存中的存储进行优化。
为了解决持久化内存随机写延迟高的问题,本实施例采用分层异构存储哈希表来减小随机写,该分层异构存储哈希表采用日志减小持久化内容写延迟;具体的,在对持久化内存哈希表进行增删改操作时,使用WAL日志,先将操作记录到WAL日志中,然后将新增的数据写入DRAM哈希表(即DRAM HashMap)中,每条WAL日志大小为256字节,字段包含:CRC16校验码(2字节)、操作类型OPTYPE(1字节)、值字节长度VALUE_LEN(1字节)、序列码SERIAL_NUM(4字节)、键内容KEY_CONTENT(8字节)、值内容VALUE_CONTENT(边长,最大240字节),每条日志以增添(append)方式写入日志尾端,由于持久化内存(Pmen)可以保证8字节的原子写,所以CRC16校验码+操作类型+值字节长度+序列码共8字节可以被保证原子的写入持久化内存中,因此可以用CRC16校验码判断日志是否写入成功与完整。每条日志256字节的大小可以保证最大程度利用持久化内存的顺序写性能。同时启动一个定时应用(apply)日志的线程,使用事务将日志apply至持久化内存的哈希表(即PMEM HashMap)中。此外,该分层异构存储哈希表利用层次哈希(PengfeiZuoetal.)的思想,减少哈希表重哈希(rehash)需要修改的数据;具体的,哈希表分为上层与下层,下层大小为上层的1/2,上层每两个桶对应下层的一个桶,每个桶包含8个key-value对,当一个key写入到哈希表中时,先查询当前桶中是否存在该key,如果不存在,则继续下层查询是否存在该key,不存在则直接进行写入;如果上层与下层的桶都写满,那么把下层置为暂存层,将上层置为下层,开始进行重哈希操作,新的上层大小分配为原上层的两倍,将暂存层的key重哈希至上层中,利用这种方式,可以将重哈希改变的key-value对减少整个哈希表的1/3。
由于传统B+树在添加与删除节点的时候需要修改大量的B+树上层结构,会形成大量的写操作,因此为了减少持久化内存中写操作,本实施例采用分层异构存储B+树;具体的,本实施例采用DRAM与持久化内存分层存储,将B+树叶子层,即所有叶子节点存储在持久化内存(即B+树PMEM部分)中,上层节点则存储在DRAM(即B+树DRAM部分)中。每个叶子节点存储16个256B的键值对,即每个叶子节点大小为4KB,当有写入、修改、删除操作时,先将修改的叶子节点写入DRAM中,将其父节点的指针指向DRAM,接着将该操作记入持久化内存的WAL日志中,WAL日志格式与上述分层异构存储哈希表相同,启动一个定时应用日志的线程,将日志记录的操作通过事务应用至持久化内存中存储的叶子节点,当一个日志commit至持久化内存后,将DRAM中父节点的指针指向持久化内存中更新的节点。
本实施例基于上述提出的分层异构存储结构进行图数据库数据存储和查询的过程具体如下,包括:
数据存储(数据写入)过程为:
机器开机时(即图数据库进程启动时),分层异构B+树需要首先读取持久化内存中的叶子节点,并在DRAM中构建出B+树上层节点,底层指针指向持久化内存中的叶子节点,如图2所示;
当一个图拓扑及其节点属性导入时,首先需要构建两个分层异构哈希表,分别存储节点ID与其源边和目的边的映射,以及边ID与其源节点和目的节点的映射,如图1所示。
对于节点的属性,需要根据需求建立索引,根据属性类型,分为等值索引以及范围查询索引,对此可以建立分层异构哈希表以及分层异构B+树以分别存储等值索引和范围查询索引。
具体如图3所示,当向分层异构哈希表写入数据时:
向DRAM哈希表写入键值对暂存;
同时将键值对写入存储在持久化内存中的WAL日志;
后台线程会定时解析WAL日志,将修改变更到持久化内存哈希表中;
释放DRAM哈希表暂存键值对的空间。
具体如图4所示,当向分层异构B+树写入数据时:
如果叶子节点空间足够,没有触发节点***或合并,则将持久化内存中对应写入的叶子节点拷贝入DRAM中,将值写入该叶子节点,将上层指针指向该叶子节点;如果叶子节点空间不足,则在DRAM中生成两个新的叶子节点,将上层指针指向这两个新的叶子节点;
将键值对写入存储在持久化内存中的WAL日志;
后台线程会定时解析WAL日志,将改动变更到持久化内存的叶子节点;
释放DRAM中B+树暂存的叶子节点的空间。
数据查询过程:
做expand操作时,从一个节点集合,得到其所有出边或入边的目的点集合,需要访问分层异构哈希表,具体如图5-6:
通过哈希函数hash(x)计算出其hash_key;
在DRAM哈希表中查找,如果不存在该hash_key,则继续下一步,若存在该hash_key,判断是否标记为空,是则返回空,否则返回值;
在持久化内存哈希表中查找,如果存在该hash_key,则返回值,否则返回空。
当需要通过属性查找节点时,需要访问属性索引的分层异构B+树:
在根节点中二分查找大于key值的第一个值,若存在,则访问该节点对应的子节点,否则访问根节点最后一个子节点指针;
该子节点(即上一步骤中确定的子节点)作为当前节点,在当前节点中二分查找大于key值的第一个值,若存在,则访问当前节点对应的子节点,否则访问当前节点最后一个子节点指针,循环当前操作,直到访问到叶子节点;
当获取到叶子节点指针时,若指针位于DRAM中,则在DRAM中读取叶子节点,否则在持久化内存中读取叶子节点,通过二分查找判断是否存在key值,若存在,则返回值,否则返回空。
下面以下述具体实例为例对图数据库数据存储流程和查询进行说明:
其中,存储过程(写入过程)具体包括:
机器开机时(即图数据库进程启动时),分层异构B+树首先需要读取持久化内存中的叶子节点,构建出上层节点;
当一个图拓扑及其节点属性导入时,首先需要构建两个分层异构哈希表,分布存储节点ID与其源边和目的边的映射,以及边ID与其源节点和目的节点的映射。对于节点的属性,需要根据需求建立索引,根据属性类型,分为等值索引以及范围查询索引,对此可以分别建立分层异构哈希表以及分层异构B+树以满足需求,假设对age属性建立范围查询索引。
对于两个节点,需要向拓扑数据哈希表添加键值对{78562323330406344,{"out_edge_id":1}},{43455993040678557,{"in_edge_id":1}}向age属性索引数据添加键值对{19,78562323330406344},{25,43455993040678557}。
当向拓扑数据哈希表写入数据时:
(1)向DRAM哈希表写入键值对{78562323330406344,{"out_edge_id":1}}暂存;
(2)向WAL日志写入操作,操作码OPTYE设置为1(写入),KEY设置为8562323330406344,VALUE设置为{"out_edge_id":1}序列化后的字符串,得到长度最长为256字节的日志,写入存储在持久化内存(PMEM)中的WAL日志;
(3)后台线程会定时解析WAL日志,将改动变更到持久化内存的哈希表中;
(4)释放DRAM哈希表暂存键对{78562323330406344,{"out_edge_id":1}}的空间。
当向age属性索引B+树写入{19,78562323330406344}时:
(1)如果叶子节点空间足够,没有触发节点***或合并,则将持久化内存中对应写入的叶子节点拷贝入DRAM中,将值写入该叶子节点,将上层指针指向该叶子节点;
如果叶子节点空间不足,则在DRAM中生成两个新的叶子节点,将上层指针指向这两个叶子节点。
(2)向WAL日志写入操作,操作码OPTYE设置为1(写入),KEY设置为19,VALUE设置为78562323330406344序列化后的字符串,得到长度最长为256字节的日志,写入存储在持久化内存中的WAL日志。
(3)后台线程会定时解析WAL日志,将改动变更到持久化内存中B+树的叶子节点中,将DRAM上层指针变更指向持久化内存的叶子节点。
(4)释放DRAM中B+树暂存的叶子节点的空间。
当向age属性索引B+树写入{25,43455993040678557}时:
(1)如果叶子节点空间足够,没有触发节点***或合并,则将持久化内存中对应写入的叶子节点拷贝入DRAM中,将值写入该叶子节点,将上层指针指向该叶子节点;
如果叶子节点空间不足,则在DRAM中生成两个新的叶子节点,将上层指针指向这两个叶子节点;
(2)向WAL日志写入操作,操作码OPTYE设置为1(写入),KEY设置为25,VALUE设置为43455993040678557序列化后的字符串,得到长度最长为256字节的日志,写入存储在持久化内存中的WAL日志。
(3)后台线程会定时解析WAL日志,将改动变更到持久化内存中B+树的叶子节点中,将DRAM上层指针变更指向持久化内存的叶子节点。
(4)释放DRAM+树暂存的两个叶子节点的空间。
查询过程具体包括:
当做expand操作时,即从一个节点集合,得到其所有出边或入边的目的点集合,需要访问拓扑数据哈希表。
当节点78562323330406344查找其出边1,及其出边1查找目的节点43455993040678557时,访问拓扑哈希表:
(1)通过哈希函数hash(x)计算出其hash_key。
(2)在DRAM哈希表中查找,如果不存在该hash_key,则继续下一步,若存在该hash_key,判断是否标记为空,是则返回空,否则返回值。
(3)在持久化内存哈希表中查找,如果存在该hash_key,则返回值,否则返回空。
当需要通过属性查找节点时,例如查找age=19的节点,需要访问age属性的索引B+树:
(1)在根节点中二分查找大于19的第一个值,若存在,则访问该节点对应的子节点,否则访问根节点最后一个子节点指针。
(2)该子节点作为当前节点,在当前节点中二分查找大于19的第一个值,若存在,则访问当前节点对应的子节点,否则访问当前节点最后一个子节点指针,循环当前操作,直到访问到叶子节点。
(3)当获取到叶子节点指针时,若指针位于DRAM中,则在DRAM中去读叶子节点,否则在持久化内存中读取叶子节点。通过二分查找判断是否存在key=19,若存在,则返回值,即节点id78562323330406344,否则返回空。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于持久化内存的图数据异构分层存储结构,其特征在于,所述图数据异构分层存储结构包括分层异构哈希表和分层异构B+树;
其中,图数据的拓扑数据和索引数据中的等值查询数据结构分别采用分层异构哈希表存储;
图数据的索引数据中的范围查询数据结构采用分层异构B+树存储。
2.根据权利要求1所述的一种基于持久化内存的图数据异构分层存储结构及,其特征在于,所述分层异构哈希表分为上层与下层,下层大小为上层大小的二分之一,即上层每两个桶对应下层的一个桶;
所述分层异构哈希表采用WAL日志进行增、删、改操作。
3.根据权利要求2所述的一种基于持久化内存的图数据异构分层存储结构,其特征在于,每个桶包含8个键值对,当一个键写入到哈希表中时,首先查询当前桶中是否存在该键,如果不存在,则继续下层查询是否存在该键,不存在则直接进行写入,如果上层与下层的桶都写满,那么把下层置为暂存层,将上层置为下层,开始进行重哈希操作,新的上层大小分配为原上层的两倍,将暂存层的键重哈希至上层中。
4.根据权利要求1所述的一种基于持久化内存的图数据异构分层存储结构,其特征在于,所述分层异构B+树采用DRAM和持久化内存分层存储,将B+树叶子层,即所有叶子节点存储在持久化内存中,上层节点则存储在DRAM中;
每个叶子节点存储16个256B的键值对,即每个叶子节点大小为4KB;
所述分层异构B+树采用WAL日志进行增、删、改操作。
5.根据权利要求4所述的一种基于持久化内存的图数据异构分层存储结构,其特征在于,当进行增、删、改操作时,先将修改的叶子节点写入DRAM中,将其父节点的指针指向DRAM,接着将该操作记入持久化内存的WAL日志中,启动一个定时应用日志的线程,将日志记录的操作通过事务应用至持久化内存中存储的叶子节点,当一个日志commit至持久化内存后,将DRAM中父节点的指针指向持久化内存中更新的节点。
6.根据权利要求2-5任一项所述的一种基于持久化内存的图数据异构分层存储结构,其特征在于,所述WAL日志大小为256字节,字段包括:2字节的CRC16校验码、1字节的操作类型OPTYPE、1字节的值字节长度VALUE_LEN、4字节的序列码SERIAL_NUM、8字节的键内容KEY_CONTENT、最大240字节的值内容VALUE_CONTENT;每条日志以增添方式写入日志尾端。
7.基于权利要求1-6任一项所述的一种基于持久化内存的图数据异构分层存储结构的数据存储方法,其特征在于,所述数据存储方法包括:
图数据库进程启动时,所述分层异构B+树首先读取持久化内存中的叶子节点,并在DRAM中构建出B+树上层节点,底层指针指向持久化内存中的叶子节点;
当一个图拓扑及其节点属性导入时,首先构建两个分层异构哈希表,分别存储节点ID与其源边和目的边的映射,以及边ID与其源节点和目的节点的映射;
根据节点的属性类型,建立分层异构哈希表存储等值索引或建立分层异构B+树存储范围查询索引。
8.根据权利要求7所述的数据存储方法,其特征在于,向分层异构哈希表写入数据时:
向DRAM哈希表写入键值对暂存;
同时将键值对写入存储在持久化内存中的WAL日志;
后台线程定时解析WAL日志,将修改变更到持久化内存哈希表中;
释放DRAM哈希表暂存键值对的空间;
向分层异构B+树写入数据时:
如果叶子节点空间足够,没有触发节点***或合并,则将持久化内存中对应写入的叶子节点拷贝入DRAM中,将值写入该叶子节点,将上层指针指向该叶子节点;如果叶子节点空间不足,则在DRAM中生成两个新的叶子节点,将上层指针指向这两个新的叶子节点;
将键值对写入存储在持久化内存中的WAL日志;
后台线程定时解析WAL日志,将修改变更到持久化内存的叶子节点;
释放DRAM中B+树暂存的叶子节点的空间。
9.基于权利要求1-6任一项所述的一种基于持久化内存的图数据异构分层存储结构的数据查询方法,其特征在于,所述数据查询方法包括:
当需要访问分层异构哈希表时:
通过哈希函数计算出其hash_key;
在DRAM哈希表中查找,如果不存在该hash_key,则继续下一步,若存在该hash_key,判断是否标记为空,是则返回空,否则返回值;
在持久化内存哈希表中查找,如果存在该hash_key,则返回值,否则返回空。
10.根据权利要求9所述的数据查询方法,其特征在于,所述数据查询方法还包括:
当需要访问分层异构B+树时:
在根节点中二分查找大于键值的第一个值,若存在,则访问该节点对应的子节点,否则访问根节点最后一个子节点指针;
该子节点作为当前节点,在当前节点中二分查找大于键值的第一个值,若存在,则访问当前节点对应的子节点,否则访问当前节点最后一个子节点指针,循环当前操作,直到访问到叶子节点;
当获取到叶子节点指针时,如果指针位于DRAM中,则在DRAM中读取叶子节点,否则在持久化内存中读取叶子节点,通过二分查找判断是否存在键值,若存在,这返回值,否则返回空。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311270531.8A CN117349477A (zh) | 2023-09-28 | 2023-09-28 | 一种基于持久化内存的图数据异构分层存储结构及其方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311270531.8A CN117349477A (zh) | 2023-09-28 | 2023-09-28 | 一种基于持久化内存的图数据异构分层存储结构及其方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117349477A true CN117349477A (zh) | 2024-01-05 |
Family
ID=89364310
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311270531.8A Pending CN117349477A (zh) | 2023-09-28 | 2023-09-28 | 一种基于持久化内存的图数据异构分层存储结构及其方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117349477A (zh) |
-
2023
- 2023-09-28 CN CN202311270531.8A patent/CN117349477A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110825748B (zh) | 利用差异化索引机制的高性能和易扩展的键值存储方法 | |
CN110083601B (zh) | 面向键值存储***的索引树构建方法及*** | |
US9672235B2 (en) | Method and system for dynamically partitioning very large database indices on write-once tables | |
US9575976B2 (en) | Methods and apparatuses to optimize updates in a file system based on birth time | |
CN105117415B (zh) | 一种优化的ssd数据更新方法 | |
Leis et al. | The adaptive radix tree: ARTful indexing for main-memory databases | |
US8868926B2 (en) | Cryptographic hash database | |
WO2020186549A1 (zh) | 一种元数据管理方法、***及介质 | |
US20120215752A1 (en) | Index for hybrid database | |
CN103229164B (zh) | 数据访问方法和装置 | |
US10521117B2 (en) | Unified table delta dictionary memory size and load time optimization | |
CN105912687A (zh) | 海量分布式数据库存储单元 | |
US10289709B2 (en) | Interleaved storage of dictionary blocks in a page chain | |
US20220027349A1 (en) | Efficient indexed data structures for persistent memory | |
CN103106286A (zh) | 元数据的管理方法和装置 | |
CN110109927A (zh) | 基于LSM树的Oracle数据库数据处理方法 | |
CN113535670B (zh) | 一种虚拟化资源镜像存储***及其实现方法 | |
Amur et al. | Design of a write-optimized data store | |
CN112732725B (zh) | 基于nvm混合内存的自适应前缀树构建方法及其***、介质 | |
US10013442B2 (en) | Database value identifier hash map | |
Jensen et al. | Optimality in external memory hashing | |
CN110110034A (zh) | 一种基于图的rdf数据管理方法、装置及存储介质 | |
WO2022068289A1 (zh) | 一种数据访问方法、装置、设备及计算机可读存储介质 | |
CN117349477A (zh) | 一种基于持久化内存的图数据异构分层存储结构及其方法 | |
Cai et al. | The Embedded IoT Time Series Database for Hybrid Solid‐State Storage System |
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 |