存储数据的方法和装置与流程

文档序号:11155456阅读:909来源:国知局
存储数据的方法和装置与制造工艺

本发明涉及信息技术领域,并且更具体地,涉及存储数据的方法和装置。



背景技术:

键值(KeyValue)类型分布式数据库作为分布式列存储数据库具有高可伸缩性和鲁棒性,已经在越来越多的系统中得到了广泛的使用。KeyValue类型分布式数据库的用户表通常被设计用来存放数据格式相对简单,关系简单但可能是海量的数据,例如:用来存储网页地址信息,用来存储通话记录信息,用来存储上网记录信息,等等。它能够根据数据记录的行键(RowKey)提供快速的查询,无关数据量的大小。它能够在当前的存储空间使用率达到一定阈值的时候动态的扩充物理节点。

在企业现有数据库应用中,通常关联很多个用户数据表,这些数据表的大小不一,并且表与表之间的数据可能存在内在的关联。而基于稀疏矩阵的KeyValue类型的分布式数据库适合存放大数据量表,如果原样将这些表导入到KeyValue类型分布式数据库中,则存在过多的小表,不仅难以实现跨表的关联查询,而且会增加管理上的复杂度。也就是说,当将传统应用中的数据迁移到KeyValue类型的分布式数据库中,为了完成用户表与用户表之间的关联查询,需要查询不同的表,不断进行数据定位导致效率低下。



技术实现要素:

本发明实施例提供了一种存储数据的方法和装置,能够提高查询数据的效率。

第一方面,提供了一种存储数据的方法,包括:确定待存储到KeyValue类型分布式数据库中的至少两个数据对象的相同的列属性;确定该至少两个数据对象中的每个数据对象在该KeyValue类型分布式数据库中的行标识的格式,其中,该行标识的格式包括该相同的列属性和数据对象标识,该至少两个数据对象中的不同数据对象的数据对象标识在该行标识的格式中的位置相同且位于该相同的列属性之后;根据确定的该每个数据对象的该行标识的格式,确定该每个数据对象的每条数据记录的行标识的值;在该KeyValue类型分布式数据库中存储该每条数据记录的行标识的值和该每条数据记录,其中,该每条数据记录的行标识的值作为该每条数据记录在该KeyValue类型分布式数据库中的主索引。

在第一种可能的实现方式中,该方法还包括:针对该每条数据记录的行标识的值,按照第一顺序对该每条数据记录进行排序,使该至少两个数据对象的所有数据记录形成聚簇表。

结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,该第一顺序为字典顺序。

结合第一方面或第一方面的第一或二种可能的实现方式,在第三种可能的实现方式中,该方法还包括:接收数据请求,该数据请求指示对该至少两个数据对象中的数据记录进行查询或获取;根据该行标识的格式,构造在该KeyValue类型分布式数据库中进行查询的查询信息,其中,该查询信息包括该相同的列属性;根据该查询信息,导出该KeyValue类型分布式数据库中主索引包含该查询信息的数据记录。

结合第一方面或第一方面的第一至三种可能的实现方式中的任一种可能的实现方式,在第四种可能的实现方式中,确定该至少两个数据对象中的每个数据对象在该KeyValue类型分布式数据库中的行标识的格式,包括:为该至少两个数据对象指定在该KeyValue类型分布式数据库中的行标识的第一前缀,其中,该第一前缀为常量;确定该至少两个数据对象中的第一数据对象的该行标识的格式包括该第一前缀、该相同的列属性和该第一数据对象的数据对象标识;或者,确定该至少两个数据对象中的第二数据对象的该行标识的格式包括该第一前缀、该相同的列属性、该第二数据对象的数据对象标识和该第二数据对象的列属性中能区分该第二数据对象的所有数据记录的列属性。

结合第一方面的第四种可能的实现方式,在第五种可能的实现方式中,该查询信息包括该第一前缀和该相同的列属性。

结合第一方面的第四或五种可能的实现方式,在第六种可能的实现方式中,该方法还包括:确定该至少两个数据对象中任一个数据对象在该KeyValue类型分布式数据库中的二级索引的格式为第二前缀,第二属性和该相同的列属性,其中,该第二属性为该任一个数据对象的列属性中不同于该相同属性的列属性,该第二前缀为与该第一前缀不同的常量;根据该任一个数据对象的该二级索引的格式确定该任一个数据对象的二级索引;在该KeyValue类型分布式数据库中存储该任一个数据对象的二级索引。

结合第一方面或第一方面的第一至六种可能的实现方式中的任一种可能的实现方式,在第七种可能的实现方式中,该行标识的格式中的各个字段之间设置分隔符,或者,该各个字段具有固定长度。

第二方面,提供了一种存储数据的装置,包括:确定模块,用于确定待存储到键值KeyValue类型分布式数据库中的至少两个数据对象的相同的列属性,确定该至少两个数据对象中的每个数据对象在该KeyValue类型分布式数据库中的行标识的格式,其中,该行标识的格式包括该相同的列属性和数据对象标识,该至少两个数据对象中的不同数据对象的数据对象标识在该行标识的格式中的位置相同且位于该相同的列属性之后,根据确定的该每个数据对象的该行标识的格式,确定该每个数据对象的每条数据记录的行标识的值;存储模块,用于在该KeyValue类型分布式数据库中存储该每条数据记录的行标识的值和该每条数据记录,其中,该每条数据记录的行标识的值作为该每条数据记录在该KeyValue类型分布式数据库中的主索引。

在第一种可能的实现方式中,该存储模块还用于,针对该每条数据记录的行标识的值,按照第一顺序对该每条数据记录进行排序,使该至少两个数据对象的所有数据记录形成聚簇表。

结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,该第一顺序为字典顺序。

结合第二方面或第二方面的第一或二种可能的实现方式,在第三种可能的实现方式中,该装置还包括:接收模块,用于接收数据请求,该数据请求指示对该至少两个数据对象中的数据记录进行查询或获取;查询模块,用于根据该行标识的格式,构造在该KeyValue类型分布式数据库中进行查询的查询信息,其中,该查询信息包括该相同的列属性,根据该查询信息,导出该KeyValue类型分布式数据库中主索引包含该查询信息的数据记录。

结合第二方面或第二方面的第一至三种可能的实现方式中的任一种可能的实现方式,在第四种可能的实现方式中,该确定模块具体用于,为该至少两个数据对象指定在该KeyValue类型分布式数据库中的行标识的第一前缀,其中,该第一前缀为常量,确定该至少两个数据对象中的第一数据对象的该行标识的格式包括该第一前缀、该相同的列属性和该第一数据对象的数据对象标识,或者,确定该至少两个数据对象中的第二数据对象的该行标识的格式包括该第一前缀、该相同的列属性、该第二数据对象的数据对象标识和该第二数据对象的列属性中能区分该第二数据对象的所有数据记录的列属性。

结合第二方面的第四种可能的实现方式,在第五种可能的实现方式中,该查询信息包括该第一前缀和该相同的列属性。

结合第二方面的第四或五种可能的实现方式,在第六种可能的实现方式中,该确定模块还用于,确定该至少两个数据对象中任一个数据对象在该KeyValue类型分布式数据库中的二级索引的格式为第二前缀,第二属性和该相同的列属性,其中,该第二属性为该任一个数据对象的列属性中不同于该相同属性的列属性,该第二前缀为与该第一前缀不同的常量,根据该任一个数据对象的该二级索引的格式确定该任一个数据对象的二级索引;该存储模块还用于在该KeyValue类型分布式数据库中存储该任一个数据对象的二级索引。

结合第二方面或第二方面的第一至六种可能的实现方式中的任一种可能的实现方式,在第七种可能的实现方式中,该行标识的格式中的各个字段之间设置分隔符,或者,该各个字段具有固定长度。

基于上述技术方案,本发明实施例的存储数据的方法和装置,通过将相关联的数据对象采用包括相同的列属性的行标识的格式存储到KeyValue类型分布式数据库中,可以实现对多个数据对象进行关联查询,从而能够提高查询数据的效率。

附图说明

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

图1是根据本发明实施例的存储数据的方法的示意性流程图。

图2是根据本发明实施例的确定行标识的格式的方法的示意性流程图。

图3是根据本发明另一实施例的存储数据的方法的示意性流程图

图4是根据本发明又一实施例的存储数据的方法的示意性流程图

图5是根据本发明实施例的存储数据的装置的示意性框图。

图6是根据本发明另一实施例的存储数据的装置的示意性框图。

图7是根据本发明实施例的存储数据的装置的结构示意图。

具体实施方式

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

本发明实施例的技术方案可以应用于KeyValue类型分布式数据库。

在本发明实施例中,数据对象为数据表(也简称为表)或者具有数据表格式的一类数据。例如,该类数据可以是通话记录数据或者上网记录数据,等等。为了描述方便,下述实施例将以数据表为例进行说明。

图1示出了根据本发明实施例的存储数据的方法100的示意性流程图。图1的方法由存储数据的装置执行。如图1所示,该方法100包括:

S110,确定待存储到KeyValue类型分布式数据库中的至少两个数据对象的相同的列属性;

S120,确定该至少两个数据对象中的每个数据对象在该KeyValue类型分布式数据库中的行标识的格式,其中,该行标识的格式包括该相同的列属性和数据对象标识,该至少两个数据对象中的不同数据对象的数据对象标识在该行标识的格式中的位置相同且位于该相同的列属性之后;

S130,根据确定的该每个数据对象的该行标识的格式,确定该每个数据对象的每条数据记录的行标识的值;

S140,在该KeyValue类型分布式数据库中存储该每条数据记录的行标识的值和该每条数据记录,其中,该每条数据记录的行标识的值作为该每条数据记录在该KeyValue类型分布式数据库中的主索引。

在本发明实施例中,在多个(即至少两个)数据对象相关联时,即多个数据对象具有相同的列属性时,为了方便对多个数据对象的关联查询,存储数据的装置将多个数据对象存储到KeyValue类型分布式数据库的一个表中。存储数据的装置基于该相同的列属性确定每个数据对象在KeyValue类型分布式数据库中的行标识(如RowKey)的格式,其中,该行标识的格式包括该相同的列属性和数据对象标识,该至少两个数据对象中的不同数据对象的数据对象标识在该行标识的格式中的位置相同且位于该相同的列属性之后。也就是说,每个数据对象的行标识的格式都包括该相同的列属性以便于查询,另外,还包括与数据对象对应的数据对象标识以区别不同数据对象。不同数据对象的数据对象标识在行标识的格式中的位置相同且位于相同的列属性之后以使不同数据对象的行标识的格式保持相一致的结构。然后,存储数据的装置根据确定的行标识的格式确定每个数据对象中的每条数据记录的行标识的值,再在KeyValue类型分布式数据库中存储每条数据记录的行标识的值和每条数据记录,其中,每条数据记录的行标识的值作为每条数据记录在KeyValue类型分布式数据库中的主索引。由于相关联的多个数据对象采用了一致的行标识的格式,这样,在查询数据时,按照行标识的格式构造查询信息,可以实现在一个数据表中对多个数据对象进行关联查询,从而能够提高查询数据的效率。

因此,本发明实施例的存储数据的方法,通过将相关联的数据对象采用包括相同的列属性的行标识的格式存储到KeyValue类型分布式数据库中,可以实现对多个数据对象进行关联查询,从而能够提高查询数据的效率。

应理解,在本发明实施例中,行标识为每一行数据的标识。行标识可以表述为RowKey,也可以表述为Key,本发明对此并不限定。为了描述方便,下述实施例以RowKey为例进行说明。

下面结合具体的例子对本发明实施例进行详细描述。应注意,其中的例子只是为了帮助本领域技术人员更好地理解本发明实施例,而非限制本发明实施例的范围。

在S110中,存储数据的装置确定待存储到KeyValue类型分布式数据库中的至少两个数据对象的相同的列属性

多个数据对象具有相同的列属性即多个数据对象相关联。

例如,数据对象A,以记录学生信息的表1为例,其属性信息包括姓名(Name),学号(Id),性别(Sex),班级(Dept)等列(Column)属性。

表1

数据对象B,以记录学生选课信息的表2为例,其属性信息包括编号(No),学号(Id),课程(course)等列属性。

表2

表1和表2都有Id列,也就是说,表1和表2有相同的列属性Id,因此,表1和表2为相关联的数据对象。

在S120中,存储数据的装置确定该至少两个数据对象中的每个数据对象在该KeyValue类型分布式数据库中的行标识的格式。

该行标识的格式包括该相同的列属性和数据对象标识,该至少两个数据对象中的不同数据对象的数据对象标识在该行标识的格式中的位置相同且位于该相同的列属性之后。

具体而言,在本发明实施例中,为了提高查询数据的效率,并不将每个数据对象采用一个独立的表进行保存,而是将多个数据对象按照统一的的格式存储到一个表中,由此实现关联查询。为了实现将多个数据对象的存储到一个表中,需要预先配置行标识的格式,以预先设计RowKey的格式为例,即预先指明RowKey是由哪些组成元素,以及组成元素如何组合。在本实施例中,行标识的组成元素包含:至少两个数据对象的相同的列属性以及数据对象标识。该相同的列属性用于将该至少两个数据对象关联存储起来,该数据对象标识用于表示每行数据来源于哪个数据对象。其中,数据对象标识位于相同的列属性之后,每个数据对象的数据对象标识在行标识的格式中的位置相同。具体地,不同数据对象的数据对象标识可以为不同的常量,用来区分不同的数据对象。

在本发明实施例中,可选地,如图2所示,S120包括:

S121,为该至少两个数据对象指定在该KeyValue类型分布式数据库中的行标识的第一前缀,其中,该第一前缀为常量;

S122,确定该至少两个数据对象中的第一数据对象的该行标识的格式包括该第一前缀、该相同的列属性和该第一数据对象的数据对象标识;或者,

S123,确定该至少两个数据对象中的第二数据对象的该行标识的格式包括该第一前缀、该相同的列属性、该第二数据对象的数据对象标识和该第二数据对象的列属性中能区分该第二数据对象的所有数据记录的列属性。

具体而言,在本实施例中,行标识中包含一个相同的前缀(表示为第一前缀)。以RowKey为例,即RowKey采用如下格式:

RowKey=第一前缀+相同的列属性+数据对象标识(+其他属性)。

在本实施例中,对于不同数据对象,RowKey格式采用相同的第一前缀和相同属性,这样,在按照RowKey值的顺序存放数据记录时,不同的数据对象的数据记录能够相邻存放(称为聚簇存放)。再通过每个数据对象对应的数据对象标识区分不同的数据对象。另外,在该相同的列属性能够区分一个数据对象(表示为第一数据对象)的所有数据记录时,例如,表1中Id属性能够区分表1的所有数据记录,第一数据对象的RowKey格式不再包括其他属性;在该相同属性不能区分一个数据对象(表示为第二数据对象)的所有数据记录时,例如,表2中Id属性不能区分表2的所有数据记录,第二数据对象的RowKey格式还要包括第二数据对象的其他列属性中能区分该第二数据对象的所有数据记录的属性,例如,表2的No属性。

以表1和表2为例,它们的相同的列属性为Id。对于表1,Id能够区分表1的所有数据记录,因此,表1的RowKey格式可以为:

A(第一前缀)+Id+M(M为表1对应的数据对象标识)。

对于表2,Id不能区分表2的所有数据记录,No能区分表2的所有数据记录,因此,表2的RowKey格式可以为:

A(第一前缀)+Id+N(N为表2对应的数据对象标识)+No。

在本发明实施例中,可选地,该行标识的格式中的各个字段之间设置分隔符,或者,该各个字段具有固定长度。

也就是说,上述RowKey格式中的“+”可以为分隔符。或者,RowKey格式的各个字段可以设置固定长度,在这种情况下“+”实际并不存在。

在S130中,存储数据的装置根据确定的该每个数据对象的该行标识的格式,确定该每个数据对象的每条数据记录的行标识的值。

具体地,以RowKey为例,存储数据的装置根据确定的RowKey的格式确定每个数据对象中的每条数据记录的RowKey值。

例如,对于数据对象A中的第一条数据记录,RowKey值为A0001M;对于数据对象B中的第一条数据记录,RowKey值为A0001N1,以此类推。

在S140中,存储数据的装置在该KeyValue类型分布式数据库中存储该每条数据记录的行标识的值和该每条数据记录。

该每条数据记录的行标识的值作为该每条数据记录在该KeyValue类型分布式数据库中的主索引。

在本发明实施例中,可选地,如图3所示,该方法100还包括:

S150,针对该每条数据记录的行标识的值,按照第一顺序对该每条数据记录进行排序,使该至少两个数据对象的所有数据记录形成聚簇表。

本发明实施例按行标识的值的顺序将数据记录存放到KeyValue类型分布式数据库中,使多个数据对象的数据记录形成聚簇表。这种聚簇表存放方式能够将行标识的值的范围与分区对应,即一条数据记录的行标识的值属于哪个范围,该数据记录就在哪个范围对应的分区,因而可以支持按范围查询。

该第一顺序可以是字典顺序,例如,可以按RowKey值的字典顺序将每条数据记录在KeyValue类型分布式数据库中排列。该第一顺序还可以是其他顺序,例如,大小顺序,即可以按照RowKey值的大小顺序依次存放数据记录,RowKey值小的存放在前,RowKey值大的存放在后,或者,RowKey值大的存放在前,RowKey值小的存放在后。本发明实施例对该第一顺序并不限定。为了便于描述,下述实施例将以RowKey值的字典顺序为例进行说明。

以表1和表2为例,按照RowKey值的字典顺序在KeyValue类型分布式数据库中存放得到表3。

表3

(包含斜线的列,表示本行数据无此列,在存储上不占据任何空间,下同)

采用本发明实施例的存储数据的方法,相关联的不同数据对象的数据记录可以相邻存放,形成聚簇表。例如,表3中的第1条数据记录为原表1的第1条记录,表3中的第2-4条记录为原表2的第1-3条记录,这些数据记录因为有相同的Id而在KeyValue类型分布式数据库中被相邻存放。通过相邻存放可以加快数据访问速率,进一步提高查询效率。

下面描述对按照上述存储方法得到的数据表进行查询的实施方式。

在本发明实施例中,可选地,如图4所示,该方法100还包括:

S160,接收数据请求,该数据请求指示对该至少两个数据对象中的数据记录进行查询或获取;

S170,根据该行标识的格式,构造在该KeyValue类型分布式数据库中进行查询的查询信息,其中,该查询信息包括该相同的列属性;

S180,根据该查询信息,导出该KeyValue类型分布式数据库中主索引包含该查询信息的数据记录。

具体而言,在接收到查询或获取数据记录的数据请求时,存储数据的装置根据行标识的格式,构造查询信息,该查询信息要包括相同的列属性,然后,存储数据的装置采用构造的查询信息进行查询,得到KeyValue类型分布式数据库中主索引包含该查询信息的数据记录。

可选地,在行标识的格式包括第一前缀时,该查询信息包括该第一前缀和该相同的列属性。

例如,当通过学生学号(Id=0001)来获取学生信息和学生选课信息时,可以构造查询信息:A0001,通过范围查询即可在表3中查询得到学生学号(Id=0001)的学生信息和学生选课信息。得到的查询结果如表4所示。在查询过程中,仅需要查询一张表,完成一次用户数据的定位,学生信息和学生选课信息相邻存放可以快速返回。

表4

因此,本发明实施例的存储数据的方法,通过将相关联的数据对象采用包括相同的列属性的行标识的格式存储到KeyValue类型分布式数据库中,可以将相关联的数据对象聚簇存放到一个数据表中,实现在一个数据表中进行关联查询,从而能够提高查询数据的效率。

在本发明实施例中,可选地,该方法100还包括:

确定该至少两个数据对象中任一个数据对象在该KeyValue类型分布式数据库中的二级索引的格式为第二前缀,第二属性和该相同的列属性,其中,该第二属性为该任一个数据对象的列属性中不同于该相同属性的列属性,该第二前缀为与该第一前缀不同的常量;

根据该任一个数据对象的该二级索引的格式确定该任一个数据对象的二级索引;

在该KeyValue类型分布式数据库中存储该任一个数据对象的二级索引。具体而言,为了满足复杂查询场景,可以对数据对象构建二级索引信息。同一个数据对象的主索引与二级索引的数据存放在同一个表中,但采用不同的行标识的格式,实现在同一个表内的数据隔离。同时可以通过二级索引信息完成关联查询。二级索引的行标识的格式为第二前缀,第二属性和该相同属性。第二前缀不同于第一前缀以实现数据隔离;该第二属性为不同于该相同属性的属性,以便于根据该第二属性构造查询信息;该相同属性用于与主索引相关联。

例如,在将数据对象表1和数据对象表2存储到KeyValue类型分布式数据库中时,表1的主索引RowKey格式可以为:A+Id+M;表2的主索引RowKey格式可以为:A+Id+N+No;表1的二级索引RowKey格式可以为:B+Name+Id。这样,按照RowKey值的字典顺序在KeyValue类型分布式数据库中存放得到表5。

表5

应理解,与二级索引RowKey对应的各列中,也可以存储列信息,例如个别关键的列信息,本发明实施例对此并不限定。

当通过学生姓名(Name=张三)来获取学生信息和学生选课信息时,可以构造查询信息:B张三,通过范围查询即可在表5中查询得到完整的二级索引RowKey信息:B张三0001。解析二级索引RowKey,得到Id=0001。再构造查询信息:A0001,进行再次查询即可在表5中得到学生信息和学生选课信息。这样便于在用户只知道Name不知道Id时进行查询。

因此,本发明实施例的存储数据的方法,通过在KeyValue类型分布式数据库中存储数据对象的二级索引,可以提供给用户更丰富多样的查询场景,方便用户查询,从而能够提高查询数据的效率。

在本发明实施例中,多个数据对象的行标识的格式还可以有其他实现方式,例如,不同数据对象的行标识的格式可以采用不同的前缀,或者,不使用前缀。

例如,不使用前缀时,RowKey采用如下格式:

RowKey=相同的列属性+数据对象标识(+其他属性)。

通过相同的列属性实现不同的数据对象的数据记录能够相邻存放,再通过每个数据对象对应的数据对象标识区分不同的数据对象。另外,在该相同的列属性能够区分一个数据对象(表示为第一数据对象)的所有数据记录时,第一数据对象的RowKey格式不再包括其他属性;在该相同的列属性不能区分一个数据对象(表示为第二数据对象)的所有数据记录时,第二数据对象的RowKey格式还要包括第二数据对象的其他列属性中能区分该第二数据对象的所有数据记录的属性。

以表1和表2为例,它们的相同的列属性为Id。对于表1,Id能够区分表1的所有数据记录,因此,表1的RowKey格式可以为:

Id+M。

对于表2,Id不能区分表2的所有数据记录,No能区分表2的所有数据记录,因此,表2的RowKey格式可以为:

Id+N+No。

这样,按照RowKey值的字典顺序在KeyValue类型分布式数据库中存放得到表6。

表6

当通过学生学号(Id=0001)来获取学生信息和学生选课信息时,可以构造查询信息:0001,通过范围查询即可查询得到学生学号(Id=0001)学生信息和学生选课信息。在查询过程中,仅需要查询一张表,完成一次用户数据的定位,学生信息和学生选课信息相邻存放可以快速返回。

不同数据对象采用不同的前缀时,RowKey采用如下格式:

RowKey=数据对象对应的前缀)+相同的列属性(+其他属性)。

不同的数据对象采用不同的前缀实现不同数据对象的分区存放。另外,在该相同的列属性能够区分一个数据对象(表示为第一数据对象)的所有数据记录时,第一数据对象的RowKey格式不再包括其他属性;在该相同的列属性不能区分一个数据对象(表示为第二数据对象)的所有数据记录时,第二数据对象的RowKey格式还要包括第二数据对象的其他列属性中能区分该第二数据对象的所有数据记录的属性。

以表1和表2为例,它们的相同的列属性为Id。对于表1,Id能够区分表1的所有数据记录,因此,表1的RowKey格式可以为:

A+Id。

对于表2,Id不能区分表2的所有数据记录,No能标识表2的所有数据记录,因此,表2的RowKey格式可以为:

B+Id+No。

这样,按照RowKey值的字典顺序在KeyValue类型分布式数据库中存放得到表7。

表7

通过不同数据对象的RowKey格式采用不同的前缀,可以实现不同数据对象在KeyValue类型分布式数据库中的分区存放。

应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

本发明实施例的存储数据的方法,通过将多个数据对象按照统一的行标识的格式存储到KeyValue类型分布式数据库中的一个数据表中,能够方便数据库的管理,提高查询数据的效率。

上文详细描述了根据本发明实施例的存储数据的方法,下面将描述根据本发明实施例的存储数据的装置。

图5示出了根据本发明实施例的存储数据的装置500的示意性框图。如图5所示,该装置500包括:

确定模块510,用于确定待存储到键值KeyValue类型分布式数据库中的至少两个数据对象的相同的列属性,确定该至少两个数据对象中的每个数据对象在该KeyValue类型分布式数据库中的行标识的格式,其中,该行标识的格式包括该相同的列属性和数据对象标识,该至少两个数据对象中的不同数据对象的数据对象标识在该行标识的格式中的位置相同且位于该相同的列属性之后,根据确定的该每个数据对象的该行标识的格式,确定该每个数据对象的每条数据记录的行标识的值;

存储模块520,用于在该KeyValue类型分布式数据库中存储该每条数据记录的行标识的值和该每条数据记录,其中,该每条数据记录的行标识的值作为该每条数据记录在该KeyValue类型分布式数据库中的主索引。

在多个(即至少两个)数据对象相关联时,即多个数据对象具有相同的列属性时,为了方便对多个数据对象的关联查询,存储数据的装置500将多个数据对象存储到KeyValue类型分布式数据库的一个表中。确定模块510基于该相同的列属性确定每个数据对象在KeyValue类型分布式数据库中的行标识(如RowKey)的格式,其中,该行标识的格式包括该相同的列属性和数据对象标识,该至少两个数据对象中的不同数据对象的数据对象标识在该行标识的格式中的位置相同且位于该相同的列属性之后。也就是说,每个数据对象的行标识的格式都包括该相同的列属性以便于查询,另外,还包括与数据对象对应的数据对象标识以区别不同数据对象。不同数据对象的数据对象标识在行标识的格式中的位置相同且位于相同的列属性之后以使不同数据对象的行标识的格式保持相一致的结构。然后,确定模块510根据确定的行标识的格式确定每个数据对象中的每条数据记录的行标识的值。存储模块520在KeyValue类型分布式数据库中存储每条数据记录的行标识的值和每条数据记录,其中,每条数据记录的行标识的值作为每条数据记录在KeyValue类型分布式数据库中的主索引。由于相关联的多个数据对象采用了一致的行标识的格式,这样,在查询数据时,按照行标识的格式构造查询信息,可以实现在一个数据表中对多个数据对象进行关联查询,从而能够提高查询数据的效率。

因此,本发明实施例的存储数据的装置,通过将相关联的数据对象采用包括相同的列属性的对多个数据对象格式存储到KeyValue类型分布式数据库中,可以实现对多个数据对象进行关联查询,从而能够提高查询数据的效率。

在本发明实施例中,可选地,该存储模块520还用于,针对该每条数据记录的行标识的值,按照第一顺序对该每条数据记录进行排序,使该至少两个数据对象的所有数据记录形成聚簇表。

在本发明实施例中,可选地,该第一顺序为字典顺序。

在本发明实施例中,可选地,该确定模块510具体用于,为该至少两个数据对象指定在该KeyValue类型分布式数据库中的行标识的第一前缀,其中,该第一前缀为常量,确定该至少两个数据对象中的第一数据对象的该行标识的格式包括该第一前缀、该相同的列属性和该第一数据对象的数据对象标识,或者,确定该至少两个数据对象中的第二数据对象的该行标识的格式包括该第一前缀、该相同的列属性、该第二数据对象的数据对象标识和该第二数据对象的列属性中能区分该第二数据对象的所有数据记录的列属性。

在本发明实施例中,可选地,如图6所示,该装置500还包括:

接收模块530,用于接收数据请求,该数据请求指示对该至少两个数据对象中的数据记录进行查询或获取;

查询模块540,用于根据该行标识的格式,构造在该KeyValue类型分布式数据库中进行查询的查询信息,其中,该查询信息包括该相同的列属性,根据该查询信息,导出该KeyValue类型分布式数据库中主索引包含该查询信息的数据记录。

可选地,在行标识的格式包括第一前缀时,该查询信息包括该第一前缀和该相同的列属性。

在本发明实施例中,可选地,该确定模块510还用于,确定该至少两个数据对象中任一个数据对象在该KeyValue类型分布式数据库中的二级索引的格式为第二前缀,第二属性和该相同的列属性,其中,该第二属性为该任一个数据对象的列属性中不同于该相同属性的列属性,该第二前缀为与该第一前缀不同的常量,根据该任一个数据对象的该二级索引的格式确定该任一个数据对象的二级索引;

该存储模块520还用于在该KeyValue类型分布式数据库中存储该任一个数据对象的二级索引。

本发明实施例的存储数据的装置,通过在KeyValue类型分布式数据库中存储数据对象的二级索引,可以提供给用户更丰富多样的查询场景,方便用户查询,从而能够提高查询数据的效率。

在本发明实施例中,可选地,该行标识的格式中的各个字段之间设置分隔符,或者,该各个字段具有固定长度。

根据本发明实施例的存储数据的装置500可对应于根据本发明实施例的的方法中的存储数据的装置,并且存储数据的装置500中的各个模块的上述和其它操作和/或功能分别为了实现图1至图4中的各个方法的相应流程,为了简洁,在此不再赘述。

本发明实施例的存储数据的装置,通过将多个数据对象按照统一的行标识的格式存储到KeyValue类型分布式数据库中的一个数据表中,能够方便数据库的管理,提高查询数据的效率。

图7示出了本发明另一个实施例提供的存储数据的装置的结构,包括至少一个处理器702(例如CPU),至少一个网络接口705或者其他通信接口,存储器706,和至少一个通信总线703,用于实现这些装置之间的连接通信。处理器702用于执行存储器706中存储的可执行模块,例如计算机程序。存储器706可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个网络接口705(可以是有线或者无线)实现与至少一个其他网元之间的通信连接。

在一些实施方式中,存储器706存储了程序7061,程序7061可以被处理器702执行,这个程序包括:

确定待存储到KeyValue类型分布式数据库中的至少两个数据对象的相同的列属性;

确定该至少两个数据对象中的每个数据对象在该KeyValue类型分布式数据库中的行标识的格式,其中,该行标识的格式包括该相同的列属性和数据对象标识,该至少两个数据对象中的不同数据对象的数据对象标识在该行标识的格式中的位置相同且位于该相同的列属性之后;

根据确定的该每个数据对象的该行标识的格式,确定该每个数据对象的每条数据记录的行标识的值;

在该KeyValue类型分布式数据库中存储该每条数据记录的行标识的值和该每条数据记录,其中,该每条数据记录的行标识的值作为该每条数据记录在该KeyValue类型分布式数据库中的主索引。

可选地,还包括:

针对该每条数据记录的行标识的值,按照第一顺序对该每条数据记录进行排序,使该至少两个数据对象的所有数据记录形成聚簇表。

可选地,该第一顺序为字典顺序。

可选地,还包括:

接收数据请求,该数据请求指示对该至少两个数据对象中的数据记录进行查询或获取;

根据该行标识的格式,构造在该KeyValue类型分布式数据库中进行查询的查询信息,其中,该查询信息包括该相同的列属性;

根据该查询信息,导出该KeyValue类型分布式数据库中主索引包含该查询信息的数据记录。

可选地,确定该至少两个数据对象中的每个数据对象在该KeyValue类型分布式数据库中的行标识的格式,包括:

为该至少两个数据对象指定在该KeyValue类型分布式数据库中的行标识的第一前缀,其中,该第一前缀为常量;

确定该至少两个数据对象中的第一数据对象的该行标识的格式包括该第一前缀、该相同的列属性和该第一数据对象的数据对象标识;或者,

确定该至少两个数据对象中的第二数据对象的该行标识的格式包括该第一前缀、该相同的列属性、该第二数据对象的数据对象标识和该第二数据对象的列属性中能区分该第二数据对象的所有数据记录的列属性。

可选地,该查询信息包括该第一前缀和该相同的列属性。

可选地,还包括:

确定该至少两个数据对象中任一个数据对象在该KeyValue类型分布式数据库中的二级索引的格式为第二前缀,第二属性和该相同的列属性,其中,该第二属性为该任一个数据对象的列属性中不同于该相同属性的列属性,该第二前缀为与该第一前缀不同的常量;

根据该任一个数据对象的该二级索引的格式确定该任一个数据对象的二级索引;

在该KeyValue类型分布式数据库中存储该任一个数据对象的二级索引。

可选地,该行标识的格式中的各个字段之间设置分隔符,或者,该各个字段具有固定长度。

从本发明实施例提供的以上技术方案可以看出,本发明实施例通过将相关联的数据对象采用包括相同的列属性的行标识的格式存储到KeyValue类型分布式数据库中,可以实现对多个数据对象进行关联查询,从而能够提高查询数据的效率。

应理解,在本发明实施例中,术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系。例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

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