一种关系数据缓存及查询方法及装置与流程

文档序号:11918678阅读:223来源:国知局
一种关系数据缓存及查询方法及装置与流程

本发明涉及数据处理技术领域,特别涉及一种关系数据缓存及查询方法及装置。



背景技术:

计算机硬件技术的数据交换缓冲区一般为介于内存和CPU之间的存储模块,先于内存,使得CPU能快速访问需要的数据。软件技术中的缓存一般为在内存和固态硬盘中开辟一片区域,存储一些经常被访问的数据,用来补充内存的不同以及磁盘访问过慢的问题。

目前主流的缓存系统有Memcache d系统和Redis系统。Memcached系统基于Key-Value进行数据缓存,Key-Value是一种键值Key和数据Value存储与访问方式,比如<1,a>,<2,b>可以通过键值1和2,访问数据a和b。Redis系统除了支持Key-Value进行数据缓存,还可以支持一些基于其他方式的数据缓存,例如基于字符串的、哈希表的,列表的、集合的和有序集的。但是上述各数据缓存方式虽然简单,但是对于一些复杂情况,例如关系数据库的缓存和查询场景,Memcached系统和Redis系统就没办法满足关系数据库的查询需求。

HBase数据库是一个分布式的、面向列的开源数据库。但HBase数据库是一个基于外存的数据库,该数据库缓存数据的载体依然是磁盘,虽然有少量数据可以缓存到内存,但当读取的数据超过了内存缓存的数据量时,读取性能将会明显下降。另外,对于Hbase数据库而言,在进行关系数据缓存时,关系数据需要存储到不同的列中,在现有的缓存系统中,针对每个列都设置对应的Key-Value,因此造成了Key的冗余,造成存储空间的浪费。另外,在进行数据存储和查找时,只能通过Key找Value,而无法实现整个关系数据的查找。



技术实现要素:

本发明实施例公开了一种关系数据缓存及查询方法及装置,用以提高关系数据的缓存效率,并提高内存资源的利用率。

为达到上述目的,本发明实施例公开了一种关系数据缓存方法,应用于电子设备,该方法包括:

接收待缓存的关系数据,其中所述关系数据中至少包括一个关联子数据;

根据每个关联子数据与列簇中每列的对应关系,将每个关联子数据缓存到对应的列中;并

根据每列是否缓存了该关系数据,更新位图索引中对应行的位图标识。

进一步地,所述将每个关联子数据缓存到对应的列中后,所述方法还包括:

针对每列,判断该列对应的过滤器中是否保存有该关联子数据,如果不存在,则将该关联子数据的信息添加到所述过滤器中。

进一步地,所述将每个关联子数据缓存到对应的列中后,所述方法还包括:

针对每列,根据该关联子数据缓存的行所在的分区,判断该列在该分区中对应的过滤器中是否保存有该关联子数据,如果不存在,则将该关联子数据的信息添加到所述过滤器中。

进一步地,不同的分区位于同一电子设备,或不同的电子设备。

进一步地,所述将每个关联子数据缓存到对应的列中包括:

针对每列,识别该列对应的缓存数据的长度是否固定;

如果是,直接在该列中缓存该关联子数据;

如果否,则根据该列对应的数据长度,将该列对应的关联子数据转换为该数据长度,并在该列中缓存该转换后的关联子数据。

进一步地,所述方法还包括:

按照设定的时间间隔,将缓存的关系数据同步到其他系统。

进一步地,所述关系数据缓存在所述电子设备的内存或固态硬盘上。

本发明实施例提供了一种基于上述关系数据缓存方法的关系数据查询方法,应用于电子设备,该方法包括:

接收待查询的数据,其中所述数据为关系数据,或关系数据中的至少一项 关联子数据;

将所述数据拆分为至少一项关联子数据;

针对每项关联子数据,根据缓存该项关联子数据的列,判断该列缓存的关联子数据中是否存在该关联子数据;如果是,根据所述关联子数据所在的位置,查找位图索引中该位置对应行的位图标识,并根据所述行的位图标识,在对应的每列相应位置提取其他关联子数据,并组合为关系数据;

将针对每个关联子数据组合得到的关第一数量联数据的交集作为查询结果。

进一步地,所述根据所述关联子数据所在的位置,查找位图索引中该位置对应行的位图标识包括:

根据该关联子数据在该列中缓存的行的行数,在所述位图索引中根据缓存有关联子数据的第一位图标识,查找第一数量的第一位图标识所在位图索引的行的标识信息,并查找所述行中针对每列的位图标识,其中所述第一数量为所述行数;

所述根据所述行的位图标识,在对应的每列相应位置提取其他关联子数据包括:

根据所述位图索引所述行中的每个第一位图标识,根据所述第一位图标识所在的列,针对该列,按照从前往后的顺序识别所述列中从开始到所述行中出现第一位图标识的次数,在相应的列中提取该对应次数的行中缓存的其他关联子数据。

进一步地,所述判断该列缓存的关联子数据中是否存在该关联子数据包括:

针对每列,在该列对应的过滤器中,判断该列存储的关联子数据的信息中是否存在该关联子数据。

进一步地,所述判断该列缓存的关联子数据中是否存在该关联子数据包括:

针对每个分区中的每列,在该列对应的每个过滤器中,判断该列存储的关联子数据的信息中是否存在该关联子数据。

本发明实施例提供了一种关系数据缓存装置,应用于电子设备,该装置包 括:

接收模块,用于接收待缓存的关系数据,其中所述关系数据中至少包括一个关联子数据;

缓存模块,用于根据每个关联子数据与列簇中每列的对应关系,将每个关联子数据缓存到对应的列中;

更新模块,用于根据每列是否缓存了该关系数据,更新位图索引中对应行的位图标识。

进一步地,所述装置还包括:

过滤模块,用于针对每列,判断该列对应的过滤器中是否保存有该关联子数据,如果不存在,则将该关联子数据的信息添加到所述过滤器中。

进一步地,所述装置还包括:

过滤模块,针对每列,根据该关联子数据缓存的行所在的分区,判断该列在该分区中对应的过滤器中是否保存有该关联子数据,如果不存在,则将该关联子数据的信息添加到所述过滤器中。

进一步地,所述缓存模块,具体用于针对每列,识别该列对应的缓存数据的长度是否固定;如果是,直接在该列中缓存该关联子数据;如果否,则根据该列对应的数据长度,将该列对应的关联子数据转换为该数据长度,并在该列中缓存该转换后的关联子数据。

进一步地,所述装置还包括:

同步模块,用于按照设定的时间间隔,将缓存的关系数据同步到其他系统。

本发明实施例提供了一种基于上述关系数据缓存装置的关系数据查询装置,应用于电子设备,该装置包括:

接收模块,用于接收待查询的数据,其中所述数据为关系数据,或关系数据中的至少一项关联子数据;

拆分模块,用于将所述数据拆分为至少一项关联子数据;

查找模块,用于针对每项关联子数据,根据缓存该项关联子数据的列,判 断该列缓存的关联子数据中是否存在该关联子数据;如果是,根据所述关联子数据所在的位置,查找位图索引中该位置对应行的位图标识,并根据所述行的位图标识,在对应的每列相应位置提取其他关联子数据,并组合为关系数据;

提供模块,用于将针对每个关联子数据组合得到的关系数据的交集作为查询结果。

进一步地,所述查找模块,具体用于根据该关联子数据在该列中缓存的行的行数,在所述位图索引中根据缓存有关联子数据的第一位图标识,查找该第一数量的第一位图标识所在位图索引的行的标识信息,并查找所述行中针对每列的位图标识,其中所述第一数量为所述行数;根据所述位图索引所述行中的每个第一位图标识,根据所述第一位图标识所在的列,针对该列,按照从前往后的顺序识别所述列中从开始到所述行中出现第一位图标识的次数,在相应的列中提取该对应次数的行中缓存的其他关联子数据。

进一步地,所述查找模块,具体用于针对每列,在该列对应的过滤器中,判断该列存储的关联子数据的信息中是否存在该关联子数据。

进一步地,所述查找模块,具体用于针对每个分区中的每列,在该列对应的每个过滤器中,判断该列存储的关联子数据的信息中是否存在该关联子数据。

本发明实施例提供了一种关系数据缓存及查询方法及装置,该缓存方法包括:接收到待缓存的关系数据后,根据每个关联子数据与列簇中每列的对应关系,将每个关联子数据缓存到对应的列中,并根据每列是否缓存了该关系数据,更新位图索引中对应行的位图标识。由于在本发明实施例中基于位图索引和每列的对应关系表,进行关系数据缓存,并且关系数据被划分为多个关联子数据,分别进行缓存,因此提高了关系数据的缓存效率,并且该方法应用于电子设备的内存,提高了内存的利用率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种关系数据的缓存过程;

图2为本发明实施例提供的一种关系数据缓存中列簇表、位图索引及每列的具体结构示意图;

图3为本发明一个实施例提供的关系数据的缓存过程;

图4为本发明实施例提供的基于上述缓存方式的一种关系数据查询过程;

图5为本发明实施例提供的另一种关系数据缓存中列簇表、位图索引及每列的具体结构示意图;

图6为本发明实施例提供的关系数据缓存装置结构示意图;

图7为本发明实施例提供的基于图6所示关系数据缓存装置的关系数据查询装置结构示意图。

具体实施方式

为了提高关系数据的缓存效率,充分利用内存资源,本发明实施例提供了一种关系数据缓存及查询方法及装置。

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例提供的一种关系数据的缓存过程,该过程包括以下步骤:

S101:接收待缓存的关系数据,其中所述关系数据中至少包括一个关联子数据。

本发明实施例提供的关系数据的缓存过程应用于电子设备,该电子设备可以是服务器、PC等进行数据缓存的设备。

关系数据中指包括至少一个关联子数据的数据,该至少一个关联子数据相互关联对该数据进行描述,例如关联子数据可以分别为:张三、男、28岁,或者李四、女、49公斤,或者马五、健康,或者只有姓名等等。

在本发明实施例中对于缓存的是哪种关系数据是已知的,该关系数据包括哪几个关联子数据也是已知的。每个待缓存的关系数据中,可以包括该关系数据的全部关联子数据,或者只包括部分关联子数据,例如该关系数据为包括姓名,性别和年龄的关联子数据的数据,则该待缓存的关系数据可以只包括其中的一个关联子数据,例如姓名,或者性别;或者包括两个关联子数据,例如包括姓名和性别,或者姓名和年龄等;当然该关系数据也可以同时包括该三个关联子数据。在具体使用时,可以根据需求进行缓存。

S102:根据每个关联子数据与缓存列的对应关系,将每个关联子数据缓存到对应的列中。

在本发明实施例中在进行关系数据缓存时,采用的是列式存储。行式存储是以行为数据缓存的处理对象,列式存储是以纵向的列为数据缓存的处理对象。一般根据关系数据包含的关联子数据的数量,确定进行缓存的列的数量。还以上述例子为例进行说明,关系数据为包括姓名,性别和年龄的关联子数据的数据,则进行缓存的列的数量为3,该3个列可以构成一个列簇。列簇是列式存储中的概念,列簇中可以包括一个或两个以上的列。

在对关系数据进行缓存时,可以预先获知缓存的关系数据中都包括几个关联子数据,以及哪几个关联子数据,每个关联子数据存储到哪个列中也是可以预先设置的,因此可以将相应的关联子数据缓存到对应列中。

S103:根据每列是否缓存了该关系数据,更新位图索引中将该行对应的位图标识。

位图索引可以对每列缓存的关联子数据进行标识,即标识每个关系数据的具体存储位置,位图索引也是由列和行构成的,列的数量与缓存关系数据的列的数量相同,行的数量与缓存关系数据的列中包含的行的数量相同。具体的该位图索引的同一行标识的是同一个关系数据的各关联子数据的存储位图,可以用位图标识进行表示,比如1可以表示存储了同一关系数据的某一关联子数据,0则表示未存储该关系数据的关联子数据。该位图索引与对关系数据进行缓存的列之间具有对应的关联关系,对关系数据进行缓存的列的每行与位图索引的每行相对应,即对关系数据进行缓存的列中存在多少行,位图索引中就有相同的行数,且两者每行之间一一对应。

为了保证两者之间的对应关系,可以将位图索引与对关系数据进行缓存的列存储在一起,也可以在位图索引和对关系数据进行缓存的列中建立一个指向对方的指针。

在对关系数据进行缓存时,根据每列是否缓存了该关系数据,更新位图索引中将该行对应的位图标识。具体的,在进行缓存时,可能某一关系数据并不包含所有的关联子数据,此时进行缓存时,该缺失的关联子数据对应的列中就没有数据存入,因此将位图索引中针对该列,将其对应的位图标识更新为0,表示该关系数据未存入该列中,关系数据中存在的关联子数据存入到对应的列中时,则在位图索引中针对列,将其对应的位图标识更新1,表示该关系数据缓存到了该列中。

为了实现关系数据的缓存,标识位图索引中每个行是否被占用,在本发明实施例中针对关系数据进行缓存的列,可以设置该有对应的ID表,在ID表中记录有与其对应的位图索引中每行是否被占用的信息。ID表包含的行的数量与位图索引包含的行的数量相同,并且ID表中记录有每行的标识信息,该标识信息可以是该行的行数。另外,为了方便关系数据的缓存,在ID表中记录有位图索引中对应的每行是否被占用的信息,例如01则表示位图索引中对应行被占用,00则表示位图索引中对应行未被占用。

因为在本发明实施例中ID表中记录的位图索引对应行被占用的信息,该行数与实际缓存的关系数据的数量是相同的,相应的位图索引中被占用的行的数量也与缓存的关系数据的数量是相同的,根据位图索引中针对每列记录的每行的位图标识,可以确定每列中缓存的关联子数据的数量。

由于在本发明实施例中基于位图索引和每列的对应关系表,进行关系数据缓存,并且关系数据被划分为多个关联子数据,分别进行缓存,因此提高了关系数据的缓存效率,并且该方法应用于电子设备的内存,提高了内存的利用率。

本发明实施例提供的关系数据缓存方式,应用于在电子设备的内存或固态硬盘上进行关系数据的缓存。相应的以下各实施方式也都是可以应用在电子设备的内存或固态硬盘上的。

图2为本发明实施例提供的一种关系数据缓存中ID表、位图索引及每列的具体结构示意图。以图2为例进行说明,图2中的ID所示即为ID表,ID表中 存在1、2、……k行,由于ID表与位图索引相对应的,在位图索引中也存在k行。列簇中对该关系数据进行缓存的列包含2个列,分别为A列和B列。为了对每列的占用情况进行标识,位图索引中也设置有两列,a列和b列,其中a列记录A列中每个关联子数据的存储情况,b列记录B列中每个关联子数据的存储情况。其中一个关系数据在该位图索引中对应一行。

如图2所示,在位图索引的第一行中记录了位图标识1和1,说明第一个关系数据同时包括两个关联子数据,该关联子数据分别存储到了A列的第一行和B列的第一行,第二行中记录了位图标识1和0,说明第二个关系数据包括一个关联子数据,该关联子数据存储在了A列的第二行,第三行记录了位图标识0和0,说明第三个关系数据未存储在任何一列中,第四行记录了位图标识1和1,说明第四个关系数据同时包括两个关联子数据,该关联子数据分别存储到了A列的第三行和B列的第二行,依次类推,该位图索引的第k行记录了位图标识1和1,说明第k个关系数据同时包括两个关联子数据,该关联子数据分别存储到了A列的第i行和B列的第j行,其中i为A列中存储关联子数据的数量,j为B列存储关联子数据的数量。

根据上述描述可知,对于ID表中的第k行,该行对应的位图索引中对应行的位图标识的组合Bitmapk=(ak,bk),ak和bk为第k行中a列和b列的位图标识。对于ak,它是a列中第i个非零值,因此在确定ak对应的为a列中的非零值数量时,可以表示为P(ak)=i,对于bk,它是b列中第j个非零值,因此在确定bk对应的为b列中的非零值数量时,可以表示为P(bk)=j。相应的对于A列,第i个数据Ai用位图索引中第k行对应的值标识,对于B列,第j个数据Bj用位图索引中第k行对应的值标识,上述各表直接的对应关系可以表示为(IDK,Ai,Bj)为同一行数据,并且P(ak)=i,P(bk)=j。

通过上述关系,可知对于上述各表中任意一行的任一一列的数值,都可能通过上述关系查找。

在本发明的另一个实施例中,为了实现关系数据的缓存,方便后续的查找,所述将每个关联子数据缓存到对应的列中后,所述方法还包括:

针对每列,判断该列对应的过滤器中是否保存有该关联子数据,如果不存在,则将该关联子数据的信息添加到所述过滤器中。

针对每列都设置有过滤器,如图2所示的Filter,在该过滤器中存储有该列中缓存的关联子数据的信息,具体的该关联子数据的信息可以是该列中缓存的每个关联子数据,可以是该列缓存的关联子数据满足的相应条件。因此当在每列缓存了相应的关联子数据后,判断过滤器是否保存有该关联子数据,如果过滤器中存储了该关联子数据,则不对该过滤器进行更新,当该过滤器中未保存该关联子数据时,则将该关联子数据的信息添加到过滤器中。

例如,对于缓存姓名、性别和年龄关系数据的每个列,对于缓存姓名的列,该列对应的过滤器中缓存的可以是该列中包含的每个姓名,如果该过滤器中没有保存该姓名,则将该姓名添加到过滤器中;对于缓存年龄的列,该列对应的过滤器缓存的可以是该列中出现的所有年龄,也可以是所有年龄所在的范围,例如该列中缓存的年龄包括13、14、15、17,则可以将过滤器中该关联子数据的信息设置为13和17之间,如果某一年龄不在该范围内,则对该范围进行调整,例如该年龄为18,则将18添加到过滤器中,将过滤器对应的关联子数据的信息设置为13和18之间。

为了满足分布式存储系统的需求,可以将数据分块,不同的数据存储在不同的设备上,因此相应的每列中的所有行可能在不同的分区中,为了方便后续数据的查找。在本发明的一个实施例中,在每个分区中针对每列可以设置对应的过滤器,所述将每个关联子数据缓存到对应的列中后,所述方法还包括:

针对每列,根据该关联子数据缓存的行所在的分区,判断该列在该分区中对应的过滤器中是否保存有该关联子数据,如果不存在,则将该关联子数据的信息添加到所述过滤器中。

不同的分区位于同一电子设备,或不同的电子设备。

虽然同一列的不同行可能在不同的设备上,但是为了便于数据的查询和缓存,列簇表和位图索引还是使用同一个,并且根据设备之间的连续,设置不同设备之间行之间的关系。

对每个列的过滤器中保存的关联子数据的信息进行更新的过程与上述实施例中相同,在本发明实施例中对该过程不进行赘述。

图3为本发明一个实施例提供的关系数据的缓存过程,该过程包括以下步骤:

S301:接收待缓存的关系数据,其中所述关系数据中至少包括一个关联子数据。

S302:根据每个关联子数据与列簇中每列的对应关系,将每个关联子数据缓存到对应的列中。

S303:根据ID表中记录的位图索引被占用的行的标识信息,确定位图索引中该关系数据对应行的标识信息。

S304:根据每列是否缓存了该关系数据,更新位图索引中将该行对应的位图标识。

S305:针对每列,根据该关联子数据缓存的行所在的分区,判断该列在该分区中对应的过滤器中是否保存有该关联子数据,如果否,则进行S306,如果是,该数据缓存过程结束。

S306:则将该关联子数据的信息添加到所述过滤器中。

上述过程中步骤S306只要位于步骤S302之后即可,本发明实施例对步骤S306与步骤S303~S305之间的顺序不做限制。

为了方便关系数据的缓存,提高关系数据缓存的效率,在本发明的一个实施例中,所述将每个关联子数据缓存到对应的列中包括:

针对每列,识别该列对应的缓存数据的长度是否固定;

如果是,直接在该列中缓存该关联子数据;

如果否,则根据该列对应的数据长度,将该列对应的关联子数据转换为该数据长度,并在该列中缓存该转换后的关联子数据。

在本发明实施例中可以采用变长域的方式进行关联子数据的存储,也可以采用变长域与定长域结合的方式进行关系数据缓存。无论采用哪种方式,每列对应的缓存字长最好固定,可以统一使用变长域的方式缓存,也可以统一使用定长域的方式缓存。

对于变长域的缓存方式,在进行缓存时包括两部分,分别为变长域的数据长度F_Length,以及具体的满足该长度的数据F_Value。对于定长域的缓存方式,只要缓存满足该固定长度的数据F_Value即可。

为了实现缓存数据之间的交互,在本发明的另一实施方式中所述方法还包括:

按照设定的时间间隔,将缓存的关系数据同步到其他系统。

具体的,在本发明实施例中可以通过数据连接驱动(Data Connection Driver)模块,实现不同系统之间缓存数据的交互,常见的数据连接驱动有java数据库连接(Java Data Base Connectivity,JDBC),开放数据库互连(Open Database Connectivity,ODBC)。

图4为本发明实施例提供的基于上述缓存方式的一种关系数据查询过程,该过程包括以下步骤:

S401:接收待查询的数据,其中所述数据为关系数据,或关系数据中的至少一项关联子数据。

该数据可能是关系数据,也可能是该关系数据中的至少一项关联子数据。关系数据中指包括至少一个关联子数据的数据,该至少一个关联子数据相互关联对该数据进行描述,例如关联子数据可以分别为:张三、男、28岁,或者李四、女、49公斤,或者马五、健康,或者只有姓名等等。

S402:将所述数据拆分为至少一项关联子数据。

在对关系数据进行查找时,可以预先获知查找的关系数据中都包括几个关联子数据,以及哪几个关联子数据,因此可以实现该数据的拆分。并可以在对应的列中查找该关联子数据。

S403:针对每项关联子数据,根据缓存该项关联子数据的列,判断该列缓存的关联子数据中是否存在该关联子数据,如果是,进行步骤S404,否则,该查询过程结束。

由于每项关联子数据缓存在对应的列中,因此对关联子数据进行查找时,在对应的列中查找即可,根据两个关联子数据是否相同,判断该列中每行缓存的关联子数据中是否存在该关联子数据,判断两个关联子数据是否相同的过程属于现有技术,在本发明实施例中对该过程不进行赘述。

S404:根据所述关联子数据所在的位置,查找位图索引中该位置对应行的位图标识,并根据所述行的位图标识,在对应的每列相应位置提取其他关联子 数据,并组合为关系数据。

在本发明实施例中位图索引可以对每列缓存的关联子数据进行标识,即标识每个关系数据的具体存储位置,具体同一行标识的是同一个关系数据的存储位图,可以用位图标识进行表示,比如1可以表示对应列中存储了同一关系数据的某一关联子数据,0则表示对应列中未存储该关系数据的关联子数据。

具体的,当存在ID表时,该位图索引与ID表之间具有对应的关联关系,ID表中的每行与位图索引的每行相对应,即ID表中存在多少行,位图索引中就有相同的行数,且两者每行之间一一对应。根据ID表中每行的标识信息,可以查找位图索引中该行的具体占用信息,并且位图索引也可以反查ID表中对应行的标识信息。

根据图2所示,每个列簇都有相应的ID表,图2中的ID所示即为该ID表,ID表中存在1、2、……k行,由于ID表与位图索引项对应的,在位图索引中也存在k行。列簇中对该关系数据进行缓存的列包含2个列,分别为A列和B列。为了对每列的占用情况进行标识,位图索引中也设置有两列,a列和b列,其中a列记录A列中每个关联子数据的存储情况,b列记录B列中每个关联子数据的存储情况。其中一个关系数据在该位图索引中对应一行。

如图2所示,在位图索引的第一行中记录了位图标识1和1,说明第一个关系数据同时包括两个关联子数据,该关联子数据分别存储到了A列的第一行和B列的第一行,第二行中记录了位图标识1和0,说明第二个关系数据包括一个关联子数据,该关联子数据存储在了A列的第二行,第三行记录了位图标识0和0,说明第三个关系数据未存储在任何一列中,第四行记录了位图标识1和1,说明第四个关系数据同时包括两个关联子数据,该关联子数据分别存储到了A列的第三行和B列的第二行,依次类推,该位图索引的第k行记录了位图标识1和1,说明第k个关系数据同时包括两个关联子数据,该关联子数据分别存储到了A列的第i行和B列的第j行,其中i为A列中存储关联子数据的数量,j为B列存储关联子数据的数量。

所述根据所述关联子数据所在的位置,查找位图索引中该位置对应行的位图标识包括:

根据该关联子数据在该列中缓存的行的行数,在所述位图索引中根据缓存 有关联子数据的第一位图标识,查找第一数量的第一位图标识所在位图索引的行的标识信息,并查找所述行中针对每列的位图标识,其中所述第一数量为所述行数;

所述根据所述行的位图标识,在对应的每列相应位置提取其他关联子数据包括:

根据所述位图索引所述行中的每个第一位图标识,根据所述第一位图标识所在的列,针对该列,按照从前往后的顺序识别所述列中从开始到所述行中出现第一位图标识的次数,在相应的列中提取该对应次数行中缓存的其他关联子数据。

其中缓存有关联子数据的第一位图标识,即上述所述的位图标识1,第二位图标识为位图标识0,为未缓存关联子数据。根据图2所示,对于ID表中的第k行,该行对应的位图索引中对应行的位图标识的组合Bitmapk=(ak,bk),ak和bk为第k行中a列和b列的位图标识。对于ak,它是a列中第i个非零值,因此在确定ak对应的为a列中的非零值数量时,可以表示为P(ak)=i,对于bk,它是b列中第j个非零值,因此在确定bk对应的为b列中的非零值数量时,可以表示为P(bk)=j。相应的对于A列,第i个数据Ai用位图索引中第k行对应的值标识,对于B列,第j个数据Bj用位图索引中第k行对应的值标识,上述各表直接的对应关系可以表示为(IDK,Ai,Bj)为同一行数据,并且P(ak)=i,P(bk)=j。

通过上述关系,可知对于上述各表中任意一行的任一一列的数值,都可能通过上述关系查找。

S405:将针对每个关联子数据组合得到的关系数据的交集作为查询结果。

针对每个关联子数据都可以查找到相应的关系数据,当该待查询的关系数据中包含两个以上的关联子数据时,将针对每个关联子数据查找到的关系数据取交集即为最终的查询结果。

例如该待查询数据为男、14岁,还依照上述实施例的描述,将该数据拆分为两项关联子数据男和14岁,分别在性别所在列和年龄所在列查找满足性别为男的关系数据以及满足年龄为14的关系数据,根据性别查找到的关系数据为第一关系数据、第二关系数据和第三关系数据,根据年龄查找到的关系数据为第 一关系数据、第二关系数据和第四关系数据,两个关联子数据组合得到的关系数据的交集为第一关系数据和第二关系数据。

由于在本发明实施例中针对每个关系数据,通过位图索引记录该关系数据的每个关联子数据的缓存位置,因此可以根据位图索引查找对应的关系数据,方便关系数据的查询,并提高内存等存储空间的利用率。

在本发明的一个实施例中,所述判断每列存储的关联子数据中是否存在该关联子数据包括:

针对每列,在该列对应的过滤器中,判断该列存储的关联子数据的信息中是否存在该关联子数据。

在上述实施例中,针对每列都设置有过滤器,如图2所示的Filter,在该过滤器中存储有该列中缓存的关联子数据的信息,具体的该关联子数据的信息可以是该列中缓存的每个关联子数据,可以是该列缓存的关联子数据满足的相应条件。因为当在每列缓存了相应的关联子数据后,判断过滤器是否保存有该关联子数据,如果过滤器中存储了该关联子数据,则不对该过滤器进行更新,当该过滤器中未保存该关联子数据时,则将该关联子数据的信息添加到过滤器中。因此根据每个列对应的过滤器中保存的关联子数据的信息,可以加快查询的速度。如果该过滤器中存在该关联子数据,则继续在该列中一一查找,如果该过滤器中不存在该关联子数据,则可以省去后续查找步骤,直接输出未查询到相应结果的提示信息。

在本发明的一个实施例中,所述判断每列存储的关联子数据中是否存在该关联子数据包括:

针对每个分区中的每列,在该列对应的每个过滤器中,判断该列存储的关联子数据的信息中是否存在该关联子数据。

为了满足分布式存储系统的需求,可以将数据分块,不同的数据存储在不同的设备上,因此相应的每列中的所有行可能在不同的分区中,为了方便后续数据的查找。在不同的分区针对每列设置有对应的过滤器。

不同的分区位于同一电子设备,或不同的电子设备。

虽然同一列的不同行可能在不同的设备上,但是为了便于数据的查询和缓 存,列簇表和位图索引还是使用同一个,并且根据设备之间的连续,设置不同设备之间行之间的关系。对每个列的过滤器中查找关联子数据的过程与上述实施例中相同,在本发明实施例中对该过程不进行赘述。

下面结合一个具体的实施例,对本发明实施例的关系数据缓存和查询过程进行说明,结合图5所示的各表间的关系示意图所示。

关系数据包括:姓名、性别和年龄关联子数据,第一个缓存的关系数据为张三、男、21岁,第二缓存的关系数据为李四、女、23岁,第三个缓存的关系数据为20岁,第四个缓存的关系数据为马五、女、20岁。

在进行缓存时姓名缓存在A列,性别缓存在B列,年龄缓存在C列,在进行缓存的关系数据中拆分出每个关系子数据,将每个关系子数据缓存在对应列中。具体的将第一个缓存的关系数据拆分为张三、男、21岁,将张三缓存在A列的第一行,将男缓存在B列的第一行,将21岁缓存在C列的第一行。当前该ID表还没有被使用,相应的位图索引也未被使用,因此将该关系数据的信息添加到位图索引的第一行中,具体的在该位图索引的第一行针对A列的位置添加位图标识1,针对B列的位置添加位图标识1,针对C类的位置添加1。并在该ID表中记录第一行被占用的信息。

另外,在将关联子数据缓存到A列时,该A列对应的数据长度为变长域长度,因此根据该列对应的数据长度,将姓名转换为该数据长度,并在该列中缓存该转换后的关联子数据。B列和C列对应的为固定数据长度,则直接在相应列中缓存关联子数据。

针对每列的过滤器,根据缓存的每个关联子数据,添加每个关联子数据的信息。并且通过数据连接驱动(Data Connection Driver)可以按照设定的时间间隔,将缓存的关系数据同步到其他文件系统(FileSystem)。

同样的针对第二个、第三个、第四个缓存的关系数据,采用相同的方式进行缓存,并对该位图索引中第二行、第三行和第四行的相应位置添加位图标识,如图5中位图索引的前四行。之后还会缓存其他的关系数据,为了简单此处只以缓存四个关系数据为例进行说明。

当接收到的待查询的数据为李四、女、23岁时,将该数据拆分为三项关联子数据分别为李四、女、23岁,则分别在A列、B列和C列中进行查询。

当在A列中进行查询时,A列对应的过滤器,判断是否缓存有李四的信息,则在A列的每行中进行查找,查找到第二行存储有李四的信息。因为李四是存储在A列的第二行的,因此在位图索引中查找出现第二个位图标识为1的行,具体的为位图索引中的第二行。根据位图索引的第二行的位图标识,可知A、B、C列中都缓存有该关系数据的关联子数据。B列中图标识1为第二次出现,则在B列的第二行中提取李四对应的其他关联子数据,C列中图标识1为也是第二次出现,则在C列的第二行中提取李四对应的其他关联子数据。

当接收到的待查询的数据为20时,该数据为关系数据的关联子数据,并且存储在C列中,则根据C列对应的过滤器中,判断是否缓存有20的信息,如果存在,则在C列中进行查找,查找到C列的第三行和第四行都存储有20的信息。因此根据C列中存储的20的行数,可知,分别为第三行和第四行,则在位图索引中查找与C列对应的列中出现第三个位图标识1的行数和出现第四个位图标识1的行数,分别为位图索引中的第三行和第四行。根据位图索引第三行中的每个位图标识可知,对应的关系数据只包含关联子数据20,根据位图索引第四行中的每个位图标识可知,对应的关系数据在A列和B列中也有存储。对于A列,根据位图索引中第四行中与A列对应的列中,第四行的位图标识1从头到第四行出现的次数为3,因此可知该关系数据的其他关联子数据缓存在A列的第3行;根据位图索引中第四行中与B列对应的列中,第四行的位图标识1从头到第四行出现的次数为3。因此可知该关系数据的其他关联子数据缓存在B列的第3行,提取A列和B列中第3行存储的其他关联子数据,与从C列第四行查找到关联子数据进行组合得到第一关系数据,并将从C列第三行查找到的关联子数据作为第二关系数据,将第一关系数据和第二关系数据作为查询结果。

依据其他关联子数据进行查找的过程与上述过程类似,在这里就不进行赘述。

图6为本发明实施例提供的关系数据缓存装置结构示意图,应用于电子设备,该装置包括:

接收模块61,用于接收待缓存的关系数据,其中所述关系数据中至少包括一个关联子数据;

缓存模块62,用于根据每个关联子数据与列簇中每列的对应关系,将每个 关联子数据缓存到对应的列中;

更新模块63,用于根据每列是否缓存了该关系数据,更新位图索引中对应行的位图标识。

所述装置还包括:

过滤模块64,用于针对每列,判断该列对应的过滤器中是否保存有该关联子数据,如果不存在,则将该关联子数据的信息添加到所述过滤器中。

所述装置还包括:

过滤模块64,针对每列,根据该关联子数据缓存的行所在的分区,判断该列在该分区中对应的过滤器中是否保存有该关联子数据,如果不存在,则将该关联子数据的信息添加到所述过滤器中。

所述缓存模块62,具体用于针对每列,识别该列对应的缓存数据的长度是否固定;如果是,直接在该列中缓存该关联子数据;如果否,则根据该列对应的数据长度,将该列对应的关联子数据转换为该数据长度,并在该列中缓存该转换后的关联子数据。

所述装置还包括:

同步模块65,用于按照设定的时间间隔,将缓存的关系数据同步到其他系统。

具体的,所述关系数据缓存在所述电子设备的内存或固态硬盘上。

图7为本发明实施例提供的基于图6所示关系数据缓存装置的关系数据查询装置结构示意图,应用于电子设备,该装置包括:

接收模块71,用于接收待查询的数据,其中所述数据为关系数据,或关系数据中的至少一项关联子数据;

拆分模块72,用于将所述数据拆分为至少一项关联子数据;

查找模块73,用于针对每项关联子数据,根据缓存该项关联子数据的列,判断该列缓存的关联子数据中是否存在该关联子数据;如果是,根据所述关联子数据所在的位置,查找位图索引中该位置对应行的位图标识,并根据所述行的位图标识,在对应的每列相应位置提取其他关联子数据,并组合为关系数据;

提供模块74,用于将针对每个关联子数据组合得到的关系数据的交集作为查询结果。

所述查找模块73,具体用于根据该关联子数据在该列中缓存的行的行数,在所述位图索引中根据缓存有关联子数据的第一位图标识,查找该第一数量的第一位图标识所在位图索引的行的标识信息,并查找所述行中针对每列的位图标识,其中所述第一数量为所述行数;根据所述位图索引所述行中的每个第一位图标识,根据所述第一位图标识所在的列,针对该列,按照从前往后的顺序识别所述列中从开始到所述行中出现第一位图标识的次数,在相应的列中提取该对应次数的行中缓存的其他关联子数据。

所述查找模块73,具体用于针对每列,在该列对应的过滤器中,判断该列存储的关联子数据的信息中是否存在该关联子数据。

所述查找模块73,具体用于针对每个分区中的每列,在该列对应的过滤器中,判断该列存储的关联子数据的信息中是否存在该关联子数据。

本发明实施例提供了一种关系数据缓存及查询方法及装置,该缓存方法包括:接收到待缓存的关系数据后,根据每个关联子数据与列簇中每列的对应关系,将每个关联子数据缓存到对应的列中,并根据每列是否缓存了该关系数据,更新位图索引中对应行的位图标识。由于在本发明实施例中基于位图索引和每列的对应关系表,进行关系数据缓存,并且关系数据被划分为多个关联子数据,分别进行缓存,因此提高了关系数据的缓存效率,并且该方法应用于电子设备的内存,提高了内存的利用率。

对于系统/装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要 素的过程、方法、物品或者设备中还存在另外的相同要素。

本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:ROM/RAM、磁碟、光盘等。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1