缓存结构、基于缓存结构实现图查询的方法和系统与流程

文档序号:32306118发布日期:2022-11-23 10:02阅读:74来源:国知局
缓存结构、基于缓存结构实现图查询的方法和系统与流程

1.本技术涉及图查询领域,特别是涉及缓存结构、基于缓存结构实现图查询的方法和系统。


背景技术:

2.在当今大数据时代,产生和消费的数据纷繁复杂,其中,绝大部分数据为非结构化数据。对于非结构化数据,key value store (简称kvs)是最适用的存储引擎,常见的kvs包括leveldb,rocksdb等。为了满足当今每秒海量数据的访问,kvs通常都会提供一个block cache缓存来加速对于底层磁盘的访问。
3.然而,现有的kvs中的cache缓存结构并不能很好的满足图查询的以下两个特征:1、点的空间局部性较差;2、存在大量对于不存在key的访问。具体地,第一,由于block cache是以block为基本操作单位,一个block往往比一个点大很多,因此在存储时,会产生单位大小的不匹配,而这种不匹配在点的空间局部性差的情况下,会导致cache缓存缺失的比例变高和cache缓存空间的使用效率低。第二,虽然kvs往往会使用bloom filter来加速过滤一些不存在的key,但其开销还是不可忽略,尤其对于一些讲究高性能的图数据查询。此外,该性能开销还会随着数据量的增加而增加,比如,对于rocksdb来说,对于一个不存在的key需要对lsm tree的每一层都进行查询才能确定这个key不存在。而对于每一层的查询主要包括key range的比较和bloom filter的查询,因此至少需要访问两次内存。而这个开销会随着数据的增加而线性增长。此外,考虑到图数据上的点和边可能有多个schema,如果绝大部分点或者边只有一个或者少数的schema上有数据,那么通过上述方法在进行图查询时,会导致对不存在的key的查询远远多于对存在的key的查询,浪费了大量的性能资源。
4.因此,针对上述相关技术中的图查询问题,亟需提出有效的解决方案。


技术实现要素:

5.本技术实施例提供了一种缓存结构、基于缓存结构实现图查询的方法和系统,以至少解决相关技术中的图查询问题。
6.第一方面,本技术实施例提供了一种用于图查询的缓存结构,所述缓存结构包括block缓存区、vertex缓存区和negative缓存区,其中,所述block缓存区为kvs存储引擎内部的缓存区;所述block缓存区,用于缓存图数据的key-value值,快速访问kvs存储引擎的meta信息和边信息;所述vertex缓存区,用于缓存点的key和属性;所述negative缓存区,用于缓存无属性存在的点的key。
7.在其中一些实施例中,在给定可用内存的情况下,系统预设所述缓存结构中block缓存区、vertex缓存区和negative缓存区的内存分配优先级比例,
或者,通过预设时间内的缓存运行统计信息,调整所述缓存结构中block缓存区、vertex缓存区和negative缓存区的内存分配优先级比例。
8.在其中一些实施例中,通过所述缓存结构的优先级比例,判断是否将最新的数据写入缓存或者将最少访问的数据换出缓存。
9.在其中一些实施例中,通过锁对所述缓存结构中的数据读写操作进行锁定。
10.在其中一些实施例中,所述缓存结构位于storage存储层。
11.第二方面,本技术实施例提供了一种基于权利要求1-5任一项所述的缓存结构实现图查询的方法,所述方法包括:判断缓存引擎接口能否通过一次缓存访问来读取存在于所述vertex缓存区或所述negative缓存区中的图数据key;若不能,则分别访问所述vertex缓存区、所述negative缓存区,查询读取对应的图数据信息;若能,则直接通过所述缓存引擎接口访问所述缓存结构,查询读取对应的图数据信息。
12.在其中一些实施例中,所述分别访问所述vertex缓存区、所述negative缓存区,查询读取对应的图数据信息包括:访问negative缓存区,如果缓存命中,则直接返回,如果缓存不命中,则继续访问vertex缓存区,如果缓存命中,则获取相关值并返回,如果缓存不命中,则继续访问kvs存储引擎;如果在所述kvs存储引擎中找到了所述key,判断vertex缓存区是否存在,如果存在,将所述key和对应的value值写入所述vertex缓存区中;如果在所述kvs存储引擎中没有找到所述key,那么判断negative缓存区是否存在,如果存在,将所述key写入所述negative缓存区中。
13.在其中一些实施例中,所述直接通过所述缓存引擎接口访问所述缓存结构,查询读取对应的图数据信息包括:通过所述缓存引擎接口访问所述缓存结构,如果命中缓存,那么读取key对应的value值,通过所述value值判断所述key是命中vertex缓存区还是命中negative缓存区,并返回相应的值;如果缓存不命中,继续访问kvs存储引擎,如果在所述kvs存储引擎中找到了key,判断vertex缓存区是否存在,如果存在,将所述key和对应的value值写入所述vertex缓存区中;如果在所述kvs存储引擎中没有找到所述key,那么判断negative缓存区是否存在,如果存在,将所述key写入所述negative缓存区中。
14.第三方面,本技术实施例提供了一种电子装置,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述第二方面所述的方法。
15.第四方面,本技术实施例提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述第二方面所述的方法。
16.相比于相关技术,本技术实施例提供的用于图查询的缓存结构,该缓存结构包括block缓存区、vertex缓存区和negative缓存区,其中,block缓存区为kvs存储引擎内部的
缓存区;block缓存区,用于缓存图数据的key-value值,快速访问kvs存储引擎的meta信息和边信息;vertex缓存区,用于缓存点的key和属性;negative缓存区,用于缓存无属性存在的点的key。
17.本技术构建的cache缓存结构相比于现有kvs存储引擎中的block cache,有着更细的粒度,通过构建的分立缓存区,针对图数据中不同的点进行分区缓存,使得存储单位与点的大小相匹配,有效提高cache缓存的空间利用率,此外,将无属性存在的点存储于negative缓存区,能加快对不存在属性的点的key的访问,提高查询效率,降低性能开销。除此之外,本技术构建的cache缓存结构还保留了kvs存储引擎中的block cache缓存块,保证了对kvs中的meta信息和边的快速访问。
附图说明
18.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:图1是根据本技术实施例的用于图查询的缓存结构示意图;图2是根据本技术实施例的一种图查询流程示意图;图3是根据本技术实施例的一种图查询流程示意图;图4是根据本技术实施例的电子设备的内部结构示意图。
具体实施方式
19.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行描述和说明。应当理解,此处所描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。基于本技术提供的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。此外,还可以理解的是,虽然这种开发过程中所作出的努力可能是复杂并且冗长的,然而对于与本技术公开的内容相关的本领域的普通技术人员而言,在本技术揭露的技术内容的基础上进行的一些设计,制造或者生产等变更只是常规的技术手段,不应当理解为本技术公开的内容不充分。
20.在本技术中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域普通技术人员显式地和隐式地理解的是,本技术所描述的实施例在不冲突的情况下,可以与其它实施例相结合。
21.除非另作定义,本技术所涉及的技术术语或者科学术语应当为本技术所属技术领域内具有一般技能的人士所理解的通常意义。本技术所涉及的“一”、“一个”、“一种”、“该”等类似词语并不表示数量限制,可表示单数或复数。本技术所涉及的术语“包括”、“包含”、“具有”以及它们任何变形,意图在于覆盖不排他的包含;例如包含了一系列步骤或模块(单元)的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可以还包括没有列出的步骤或单元,或可以还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。本技术所涉及的“连接”、“相连”、“耦接”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电气的连接,不管是直接的还是间接的。本技术所涉及的“多个”是指大于
或者等于两个。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。本技术所涉及的术语“第一”、“第二”、“第三”等仅仅是区别类似的对象,不代表针对对象的特定排序。
22.在相关技术中,图查询存在两个特征:a.点的空间局部性比较差,b.存在大量对不存在属性的点的key值访问。
[0023] 首先关于特征a:对图的查询需要遍历,而在进行图遍历时往往需要多次迭代,其流程可以简单描述为:先对当前输入点a,找到该点的邻居集合n={a1, a2, a3,
ꢀ…ꢀ
an},该集合作为下一轮迭代的输入。然后对集合n中的每一个点继续寻找邻居集合,不断重复上述步骤直至图遍历完全。
[0024]
通过上述图遍历过程可以看出每次迭代,需要访问一个点的所有邻居。在分布式图数据库中,点是通过哈希随机分布在不同的数据分片中的,因此寻找一个点的邻居往往需要访问多个磁盘和多个存储节点。且随着迭代次数的增加,该随机访问次数也会呈指数上升。因此,在图查询时,点的空间局部性很差。
[0025]
关于特征b:图的一个显著特征是schema-less。而任何一个点和边,其schema都不是固定的,可以是任意schema,而且随时可以更改。例如,一个人,其点的可以定义多个schema属性:学生、本科生、研究生等。而在图查询时往往需要返回点或者边上的所有schema的属性。例如,查询:match (n:person) return n,该查询需要找到具有person这个schema的点,并返回该点上的所有属性。然而在查询时无法预知一个点上哪些schema具有属性,所以对于所有可能的schema,都得构造查询的key,然后对底层存储引擎进行访问。然而不是所有点、边在每一种schema下都有属性,如果对无属性的点进行了key构造,并进行底层访问,那么就会在图查询中存在大量对不存在属性的点的key的访问。
[0026]
针对上述两个特征,现有kvs中的cache缓存结构并不能很好的满足,因此,为了解决现有技术中的图查询问题,本技术提出了一种用于图查询的缓存结构,图1是根据本技术实施例的用于图查询的缓存结构示意图,如图1所示,该缓存结构(nebula-cache)包括block缓存区(block cache)、vertex缓存区(vertex cache)和negative缓存区(negative cache),其中,block缓存区为kvs存储引擎(rocksdb)内部的缓存区。此外,该缓存结构位于storage存储节点中。
[0027]
具体地,block缓存区,用于缓存图数据的key-value值,能快速访问kvs存储引擎的meta信息和边信息;vertex缓存区,用于缓存点的key和属性;negative缓存区,用于缓存无属性存在的点的key。
[0028]
通过上述缓存结构,本实施例通过在存储层原有的block缓存区的基础上增加了vertex缓存区和negative缓存区两个缓存区,替代现有技术中默认的大块blockcache缓存的方式,满足了图查询的两大特征,有效提高了性能。
[0029]
需要说明的是,block缓存区为kvs存储引擎中原有的缓存,在本实施例的缓存结构中保留,以保证kvs的meta信息和边的快速访问。vertex缓存区和negative缓存区则是本技术缓存结构中设立的新的缓存区,通过vertex缓存区缓存点的key和属性值,能避免现有的图查询中通过整个block进行缓存时存在的缓存单位大小不匹配的问题,提高缓存的空间利用率;而通过negative缓存区缓存无属性存在的点的key,能有效减小图查询时遍历访问的次数,降低对该类点的查询开销。
[0030]
在其中一些实施例中,在给定可用内存的情况下,系统预设缓存结构中block缓存区、vertex缓存区和negative缓存区的内存分配优先级比例,例如3:2:1;或者,通过预设时间内的缓存运行统计信息,调整缓存结构中block缓存区、vertex缓存区和negative缓存区的内存分配优先级比例。优选的,本实施例中的统计信息包括:预设时间内缓存结构中每个缓存被读取的次数,次数越多,其优先级越高,需要根据实际情况逐步增加其优先级或内存空间大小。
[0031]
在其中一些实施例中,通过缓存结构的优先级比例,判断是否将最新的数据写入缓存或者将最少访问的数据换出缓存。例如,生成一个随机值,判断该值是否小于概率3/(3+2+1)来决定是否将最新的数据写入或者将最少访问的数据换出。其中,如果小于,则换入缓存;如果不小于,则不操作。
[0032]
在其中一些实施例中,由于图数据之间可能存在同一份数据被复制到多个不同的存储节点上的情况,因此对于点进行更新或写入后,需要对该点的每个复制数据所在存储节点上的缓存都进行同步更新或删除。而为了保证强一致性,在每个存储节点上,需要首先写入底层存储,再更新或删除缓存中的点。然而由于本实施例的缓存结构的不同,读的流程比较复杂。在缓存缺失(cache miss)的情况下,就需要从rocksdb中读取,并写入缓存结构的vertex缓存区或negative缓存区中。为了避免这个过程被打断,而导致数据不一致,本实施例中通过锁对缓存结构中的上述数据读写操作进行锁定,避免读的过程被写打断。需要说明的是,本技术实施例中的缓存结构适用于对图数据进行查询的任何系统中,并不仅仅局限于图数据库系统。
[0033]
本实施例还提供了一种基于上述缓存结构实现图查询的方法。根据本技术中的缓存结构nebula cache,由于其新增了vertex缓存区和negative缓存区,因此,相对于原有的block缓存区的读写方式,其整体读的流程会发生改变。原有的block cache缓存是kvs内部的缓存,对外是隐藏的,无法直接访问。因此,可以通过直接访问kvs读取数据,该数据可能来源于block cache缓存,也可能来源于磁盘。而基于本实施例中的缓存结构nebula cache进行图查询,读写数据的方法如下:判断缓存引擎接口能否通过一次缓存访问来读取存在于vertex缓存区或negative缓存区中的图数据key:第一种情况,若不能,则分别访问vertex缓存区、negative缓存区,查询读取对应的图数据信息。图2是根据本技术实施例的一种图查询流程示意图,如图2所示,具体步骤包括:在判断negative缓存区存在的情况下访问negative缓存区,如果缓存命中,意味着key不存在于数据库中,则直接返回,如果缓存不命中,意味着key可能存在也可能不存在于数据库中,则在判断vertex缓存区存在的情况下,继续访问vertex缓存区,如果缓存命中,则获取相关值并返回,如果缓存不命中,则继续访问kvs存储引擎;如果在kvs存储引擎中找到了key,此时需要再次判断vertex缓存区是否存在,如果存在,将该key和从kvs存储引擎中读取的对应的value值写入vertex缓存区中;如果在kvs存储引擎中没有找到该key,那么判断negative缓存区是否存在,如果存在,将该key写入negative缓存区中。
[0034]
第二种情况,若能,则直接通过缓存引擎接口访问缓存结构,查询读取对应的图数据信息。图3是根据本技术实施例的另一种图查询流程示意图,如图3所示,具体步骤包括:通过缓存引擎接口访问本实施例的缓存结构,如果命中缓存,那么读取key对应的value值,
通过该value值判断该key是命中vertex缓存区还是命中negative缓存区,并返回相应的值;如果缓存不命中,继续访问kvs存储引擎,如果在kvs存储引擎中找到了key,判断vertex缓存区是否存在,如果存在,将该key和从kvs存储引擎中读取的对应的value值写入vertex缓存区中;如果在kvs存储引擎中没有找到该key,那么判断negative缓存区是否存在,如果存在,将该key写入negative缓存区中。
[0035]
需要说明的是,在上述流程中或者附图的流程图中示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0036]
本实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
[0037]
可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
[0038]
另外,结合上述实施例中的基于缓存结构实现图查询的方法,本技术实施例可提供一种存储介质来实现。该存储介质上存储有计算机程序;该计算机程序被处理器执行时实现上述实施例中的任意一种基于缓存结构实现图查询的方法。
[0039]
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于缓存结构实现图查询的方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
[0040]
在一个实施例中,图4是根据本技术实施例的电子设备的内部结构示意图,如图4所示,提供了一种电子设备,该电子设备可以是服务器,其内部结构图可以如图4所示。该电子设备包括通过内部总线连接的处理器、网络接口、内存储器和非易失性存储器,其中,该非易失性存储器存储有操作系统、计算机程序和数据库。处理器用于提供计算和控制能力,网络接口用于与外部的终端通过网络连接通信,内存储器用于为操作系统和计算机程序的运行提供环境,计算机程序被处理器执行时以实现一种基于缓存结构实现图查询的方法,数据库用于存储数据。
[0041]
本领域技术人员可以理解,图4中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0042]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom
(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink) dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
[0043]
本领域的技术人员应该明白,以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0044]
以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1