数据查询方法和数据库系统
技术领域
本发明涉及数据库领域,尤其涉及一种基于文档(document)数据模型的数据查询方法和数据库系统
背景技术
document数据模型是抽象的数据模型,其数据格式与语言和平台无关。document数据模型一般适用于数据类型多且存在大量的空值,比如社交类的用户信息、手机、邮箱、地址、性别等等。
document数据模型中的数据可以使用根据谷歌(Google)公开的论文《Dremel:Interactive Analysis of WebScaleDatasets》中所述的Google Dremel来存储。Dremel是Google的“交互式”数据分析系统,可以分析只读的嵌套数据模型,支持列存储。
列存储是指数据库中的数据是以列为单位进行存储的。由于同列的数据不仅具有相同的数据结构,而且数据的重复性机率也将更大,因此这一存储结构适合于对数据进行压缩,从而减少中央处理器(Central Processing Unit,CPU)的消耗和存储空间。同时,在进行查询时,只需读取与查询相关的列即可,而不需要把数据库的整条记录的数据都加载到内存中,从而大大减少了磁盘和网络输入/输出(Input/Output,I/O)端口的负载。
Google Dremel中嵌套的数据结构对应的数据,在磁盘中保存的文件格式除了可以使用列存储的方式存储,同时,还需要存储两个变量r(repetition level)、d(definition level)才能保证数据的信息完整。其中,repetition level表示repeated关系,即嵌套关系;definition level表示optional关系,即该数据可以为空值(NULL)。
Google Dremel中查询数据时,对于带条件的查询语句,会将查询列和条件列一起组合,逐条遍历数据列,并将每次遍历的数据组合成记录,然后根据查询条件,从组合的记录中筛选得到符合条件的数据。这种查询方法导致对于Dremel的数据查询的查询效率低下。
发明内容
本发明提供一种基于document数据模型的数据查询方法和数据库系统,能够提高数据的查询效率。
第一方面,本发明提供了一种基于document数据模型的数据查询方法,该方法包括确定数据库中与查询条件对应的数据列的bitmap(位图),然后根据这些bitmap确定数据库中与查询目标对应的数据列的bitmap,最后根据查询目标对应的数据列的bitmap获取查询目标。
在一种可能的实现方式中,若假设应用该数据查询方法的数据库系统中的列存储数据库包括n个列,n≥1,则确定与查询条件对应的数据列的bitmap时,可以先根据查询语句确定查询条件和查询目标;然后根据查询条件将n个列中的n1个列分别确定为条件列,n1≥1;且根据查询目标将n个列中的n2个列分别确定为查询列,n2≥1;再根据查询条件生成n1个条件列中每个条件列的位图,位图表示与位图中的状态值一一对应的数据值是否满足查询条件;接下来根据n1个条件列的位图生成n2个查询列的位图,位图表示与位图中的状态值一一对应的数据值是否满足查询条件;最后根据n2个查询列的位图和n2个查询列获取查询结果。
本发明实施例的数据查询方法不需要将查询列和条件列组合起来逐条遍历,只需查询条件列和查询列对应的列数据即可实现查询,从而提高了数据查询的效率。
在一种可能的实现方式中,数据库中的数据列全为同一层次,且根据查询语句确定的只有一个条件列和一个查询列,此时,直接根据查询条件确定该条件列的bitmap,然后根据该bitmap从查询列中获取查询结果。
在一种可能的实现方式中,数据库中的数据列全为同一层次,且根据查询语句确定的是多个条件列和一个查询列时,可以先根据查询条件分别确定每个条件列的bitmap,然后根据查询条件中这些条件列之间的逻辑关系对条件列的bitmap进行逻辑操作,以得到查询列的一个bitmap。最后再根据该bitmap从查询列中获取查询结果。
在一种可能的实现方式中,数据库中的数据列全为同一层次,且根据查询语句确定的是多个条件列和多个查询列时,先根据查询条件分别确定每个条件列的bitmap,然后根据查询条件中这些条件列之间的逻辑关系对条件列的bitmap进行逻辑操作,以得到查询列的一个bitmap。最后再根据该bitmap从多个查询列中分别获取查询结果。
在一种可能的实现方式中,数据库中的数据列分为不同的层次,根据查询语句确定的条件列只有一个,根据查询语句确定的查询列也只有一个,且条件列所属的层次与查询列所属的层次相同时,数据查询方法与数据库中的数据列全为同一层次且条件列和查询列均只有一个时的数据查询方法相同。
在一种可能的实现方式中,数据库中的数据列分为不同的层次,根据查询语句确定的条件列有多个,这多个条件列属于同一层次,根据查询语句确定的查询列只有一个,且条件列所属的层次与查询列所属的层次相同时,数据查询方法与数据库中的数据列全为同一层次且条件列为多个、查询列只有一个时的数据查询方法相同。
在一种可能的实现方式中,数据库中的数据列分为不同的层次,根据查询语句确定的条件列有多个,这多个条件列属于同一层次,根据查询语句确定的查询列有多个,这多个查询列属于同一层次,且条件列所属的层次与查询列所属的层次相同时,数据查询方法与数据库中的数据列全为同一层次且条件列为多个、查询列为多个时的数据查询方法相同。
在一种可能的实现方式中,数据中的数据列分为不同的层次,根据查询语句确定的条件列只有一个,根据查询语句确定的查询列也只有一个,但条件列所述的层次比查询列所属的层次浅时,数据库中的数据列还需包括表示每个数据的路径重复的层次的重复路径信息。此时,具体的数据查询方法为:先根据查询条件确定查询列的bitmap,再根据该bitmap和查询列中的重复路径信息确定查询列的bitmap,最后根据查询列的bitmap从查询列中获取查询结果。
应理解,由于数据库中,位于同一层次的数据列的重复路径信息一般都是相同的,所以可以根据条件列的bitmap和与查询列位于同一层次的任意数据列中的重复路径信息来确定查询列的bitmap。当然,根据该bitmap和查询列中的重复路径信息确定查询列的bitmap更能体现出查询列的bitmap与查询列间的对应关系。
在一种可能的实现方式中,数据中的数据列分为不同的层次,根据查询语句确定的条件列有多个,这多个条件列属于同一层次,根据查询语句确定的查询列只有一个,但条件列所述的层次比查询列所属的层次浅时,数据库中的数据列还需包括表示每个数据的路径重复的层次的重复路径信息。此时,具体的数据查询方法为:先根据查询条件确定每个条件列的bitmap,再根据查询条件中的逻辑关系对多个条件列的bitmap进行逻辑操作,以得到条件列所属层次的bitmap;然后根据条件列所属层次的bitmap和查询列中的重复路径信息确定查询列的bitmap,最后根据查询列的bitmap从查询列中获取查询结果。
当然,根据查询条件确定每个条件列的bitmap后,也可以分别根据每个条件列的bitmap和查询列中的重复路径信息确定出查询列的多个子bitmap,然后再根据查询条件中的逻辑关系对这多个子bitmap进行逻辑操作,以得到查询列的最终bitmap,最后在根据查询列的最终bitmap从查询列中获取查询结果。
在一种可能的实现方式中,数据中的数据列分为不同的层次,根据查询语句确定的条件列有多个,这多个条件列属于同一层次,根据查询语句确定的查询列有多个,这多个查询列属于同一层次,但条件列所述的层次比查询列所属的层次浅时,确定查询列的bitmap的方法与上一种可能的实现方式中的方法相同,只是最后根据查询列的bitmap从多个查询列中分别获取查询结果。
在一种可能的实现方式中,当条件列所属的层次比查询列所属的层次浅时,根据条件列所属层次的bitmap和查询列的重复路径信息,生成查询列所属层次的bitmap的具体方法包括:将查询列所属的层次中的任意一个列中表示路径重复的层次小于或等于条件列所属层次的所有重复路径信息确定为第一重复路径信息集合;确定条件列所属层次的位图中表示数据值满足查询条件的状态值的第一位置;将第一重复路径信息集合中第一位置的重复路径信息在查询列的所有重复路径信息中的位置确定为第二位置;将第一重复路径信息集合中第一位置的下一个重复路径信息在查询列的所有重复路径信息中的位置确定为第三位置;将条件列所属层次的位图中从第二位置开始到第三位置之前的状态值置为表示数据值满足查询条件,以得到查询列所属层次的bitmap。
应理解,当所有条件列中,一个层次的条件列只有一个时,该条件列的bitmap即为该条件列所属的层次的bitmap。当所有查询列中,一个层次的查询列只有一个时,该查询列所属层次的bitmap即为该查询列的bitmap。
在一种可能的实现方式中,数据中的数据列分为不同的层次,根据查询语句确定的条件列只有一个,根据查询语句确定的查询列也只有一个,但条件列所述的层次比查询列所属的层次深时,数据库中的数据列还需包括表示每个数据的路径重复的层次的重复路径信息。此时,具体的数据查询方法为:先根据查询条件确定查询列的bitmap,再根据该bitmap和条件列中的重复路径信息确定查询列的bitmap,最后根据查询列的bitmap从查询列中获取查询结果。
应理解,由于数据库中,位于同一层次的数据列的重复路径信息一般都是相同的,所以可以根据条件列的bitmap和与条件列位于同一层次的任意数据列中的重复路径信息来确定查询列的bitmap。当然,根据该bitmap和该条件列列中的重复路径信息确定查询列的bitmap更能体现出条件列的bitmap与条件列间的对应关系。
在一种可能的实现方式中,数据中的数据列分为不同的层次,根据查询语句确定的条件列有多个,这多个条件列属于同一层次,根据查询语句确定的查询列只有一个,但条件列所述的层次比查询列所属的层次深时,数据库中的数据列还需包括表示每个数据的路径重复的层次的重复路径信息。此时,具体的数据查询方法为:先根据查询条件确定每个条件列的bitmap,再根据查询条件中的逻辑关系对多个条件列的bitmap进行逻辑操作,以得到条件列所属层次的bitmap;然后根据条件列所属层次的bitmap和条件列中的重复路径信息确定查询列的bitmap,最后根据查询列的bitmap从查询列中获取查询结果。
当然,根据查询条件确定每个条件列的bitmap后,也可以分别根据每个条件列的bitmap和条件列中的重复路径信息确定出查询列的多个子bitmap,然后再根据查询条件中的逻辑关系对这多个子bitmap进行逻辑操作,以得到查询列的最终bitmap,最后在根据查询列的最终bitmap从查询列中获取查询结果。
在一种可能的实现方式中,数据中的数据列分为不同的层次,根据查询语句确定的条件列有多个,这多个条件列属于同一层次,根据查询语句确定的查询列有多个,这多个查询列属于同一层次,但条件列所述的层次比查询列所属的层次深时,确定查询列的bitmap的方法与上一种可能的实现方式中的方法相同,只是最后根据查询列的bitmap从多个查询列中分别获取查询结果。
在一种可能的实现方式中,当条件列所属的层次比查询列所属的层次深时,根据条件列所属层次的bitmap和条件列的重复路径信息,生成查询列所属层次的bitmap的具体方法包括:将条件列中表示路径重复的层次小于或等于查询列所属层次的所有重复路径信息确定为第一重复路径信息集合;确定条件列的bitmap中表示数据值满足查询条件的状态值的第一位置;将条件列的所有重复路径信息中位于第一位置的重复路径信息确定为第一重复路径信息。若第一重复路径信息表示的路径重复的层次小于或等于查询列所属层次,则将第一重复路径信息在第一重复路径信息集合中的位置确定为第二位置,然后将查询列所属层次的bitmap中位于第二位置的状态值置为表示数据值满足查询条件;若第一重复路径信息表示的路径重复的层次大于查询列所属层次,则将所述条件列的所有重复路径信息中第一重复路径信息之前的第一个小于或等于查询列层次的重复路径信息在第一重复路径信息集合中的位置确定为第三位置,然后将查询列所属层次的bitmap中位于第三位置的状态值置为表示数据值满足查询条件,以得到查询列所属层次的bitmap。
在一种可能的实现方式中,数据中的数据列分为不同的层次,根据查询语句确定的条件列有多个,这多个条件列属于m1个层次,根据查询语句确定的查询列只有一个或有属于同一层次的多个查询列,具体的数据查询方法为:在根据查询条件确定所有条件列的bitmap后,根据查询条件中的逻辑关系对所有条件列中属于m1个层次中的第i个层次的所有列的bitmap进行逻辑操作,以生成第i个层次的bitmap。按照此方法依次对m1个层次中不同层次的条件列的bitmap进行逻辑操作,从而得到m1个层次中每个层次的bitmap。然后根据m1个层次中不同层次的bitmap生成查询列的m1个子bitmap;再根据查询条件中的逻辑关系对查询列的m1个子bitmap进行逻辑操作,以生成查询列所属层次的最终bitmap。最后再根据该最终bitmap从查询列中获取查询结果。
在一种可能的实现方式中,数据中的数据列分为不同的层次,根据查询语句确定的条件列有多个,这多个条件列属于m1个层次,根据查询语句确定的查询列有多个,这多个条件列属于m2个层次,具体的数据查询方法为:根据上述可能的实现方式中所述的方法确定查询列的m2个层次中每个层次的bitmap,最后再根据查询列的m2个层次中每个层次的bitmap从属于该层次的所有查询列中获取查询结果。
第二方面,提供了一种基于document数据模型的数据库系统,该数据库系统具有实现上述数据查询方法的功能,所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。
第三发面,提供了一种基于document数据模型的数据库系统,包括:处理器、存储器、总线系统、接收器和发送器。其中,处理器、存储器通过总线系统相连,该存储器用于存储指令,该处理器用于执行该存储器存储的指令,该处理器具体用于执行上述各种可能的实现方式中的数据查询方法。
相比于现有技术,本发明提供的技术方案,先根据查询语句中的查询条件和查询目标分别确定条件列和查询列,然后生成表示条件列中的值是否满足查询条件的位图,再根据位图对查询列进行查询,从查询列中得到查询结果。本发明的数据查询方法只需查询条件列和查询列对应的列数据即可实现查询,从而提高了数据查询的效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例的Googel Dremel的列存储格式示意图。
图2是本发明实施例的Googel Dremel的列存储格式示意图。
图3是本发明实施例的Googel Dremel的列存储格式示意图。
图4是本发明一个实施例的基于document数据模型的数据查询方法的示意性流程图。
图5是本发明一个实施例的条件列的位图示意图。
图6是本发明另一个实施例的条件列的位图示意图。
图7是本发明另一个实施例的条件列的位图示意图。
图8是本发明另一个实施例的基于document数据模型的数据查询方法的示意性流程图。
图9是本发明另一个实施例的基于document数据模型的数据查询方法的示意性流程图。
图10是本发明另一个实施例的基于document数据模型的数据查询方法的示意性流程图。
图11是本发明一个实施例的基于document数据模型的数据库系统的示意性框架图。
图12是本发明另一个实施例的基于document数据模型的数据库系统的示意性框架图
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面先介绍一下数据库系统及其结构。数据库系统一般包括数据库、硬件、软件和人员四个组成部分。数据库(DataBase,DB)是指长期存储在计算机内部或外部的存储介质上的、有组织、可共享的数据的集合。数据库中的数据按一定的数学模型组织、描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并可为各种用户共享。硬件是指构成计算机系统的各种物理设备,即包括存储所需的内部设备,也包括存储所需的外部设备。硬件的配置应满足整个数据库系统的需要。软件包括操作系统、数据库管理系统及应用程序。数据库管理系统(DataBase Management System,DBMS)是数据库系统的核心软件,在操作系统的支持下科学地组织、存储数据和高效获取、维护数据,其可以使得用户可以通过不同的方法去建立、修改或查询数据库中的数据。人员包括最终用户,他们利用系统的接口或查询语言访问数据库,如向数据库中添加数据、删除数据或查询数据。
数据库系统的结构一般可以分为四种。第一种为集中式数据库系统,即整个数据库系统运行在单个计算机系统中,并与其它的计算机系统没有联系。第二种为客户机/服务器式数据库系统,即数据库系统中的一些功能由客户机执行,另外一些功能由服务器执行。如可以由服务器来运行数据库和数据库管理系统,不同的用户可以使用不同的客户机通过系统的接口或查询语言使用服务器上的数据管理系统来查询数据库中的数据。第三种为分布式数据库系统,即多个计算机系统通过通信网络连接起来,数据在物理上分布在各个计算机系统中。第四种数据库系统为并行式数据库系统,即并行使用多个中央处理器(CenterProcess Unit,CPU)和多个磁盘操作。并行处理时,许多操作同时进行,而不是采用分时的方法。
上述对数据库系统及其结构的介绍只是为了更好地理解本发明的技术方案,不应对应用本发明实施例中的数据查询方法的数据库系统及其结构构成限制。
为了更好地介绍本发明的数据查询方法,下面详细介绍document数据模型的文件格式。该document数据模型的文件格式可以通过数据库系统中的数据管理系统来定义。本发明一个实施例的document数据模型的文件格式的一个示例如下:
其中,required表示必须填写该数据;optional表示该数据可以填空值(NULL),repeated表示可以填写多条该数据。
上述document数据模型的数据可分为三个层次。其中,user_id、user_name和user_address为第一层次;feed_id、feed_name和feed_commit为第二层次;commit_id和comment为第三层次。
应理解,上述document数据模型的文件格式只是为了更好地理解本发明的技术方案而举的例子,其中的层次数量、表名、各个字段名及字符长度不应对本发明构成限制。如本发明实施例中的document数据模型中的数据也可以只包含一个层次。
根据上述示例性document数据模型生成的数据表中的一条示例性数据如下所示:
根据上述示例性document数据模型生成的数据表中的另一条示例性数据如下所示:
上述两条示例性数据在Googel Dremel中的存储格式分为8列:user_id列、user_name列、user_address列、feed_id列、feed_name列、feed_commit列、commit_id列和comment列。user_id列、user_name列和user_address列属于第一层次,feed_id列、feed_name列和feed_commit列属于第二层次,commit_id列和comment列属于第三层次。第一层次的每个列分别可以对应第二层次的多个列,第二层次的每个列也分别可以对应第三层次的多个列。在Googel Dremel中,user_id列的存储格式如图1(a)所示,user_name列的存储格式如图1(b)所示,user_address列的存储格式如图1(c)所示;feed_id列的存储格式如图2(a)所示,feed_name列的存储格式如图2(b)所示,feed_commit列的存储格式如图2(c)所示;commit_id列的存储格式如图3(a)所示,comment列的存储格式如图3(b)所示。
图1至图3所示的8个表格中,value表示该列包含的值。r为repetition level的简称,表示该列的值对应的路径在哪一个层次上重复,即在哪个层次上出现多个值。如,test为表,可以视其repetition level为0,feed的repetition level为1,commit的repetitionlevel为2,comment的repetition level为3。因此,test.feed.commit.comment的r范围是1到3之间。以图3(b)所示的comment列为例,comment列中的第一个值“ghy”为第一个feed的第一个commit的第一个comment,是第一次出现,因此值“ghy”的r为1,表示新记录的开始;第二个值“fggg”为第一个feed的第二个commit的第一个comment,与“ghy”的路径相比,其路径中的commit重复出现,因此其r为2;第三个值“nnh”为第一个feed的第二个commit的第二个comment,其在comment层次上是重复的,即在comment层面出现多个值,因此其r为3。d即definition level,定义该值的路径的深度,即该路径的最深层次。以表8所示的comment列为例,表8中的第一个值为“ghy”,不为NULL,即“ghy”的路径上都有值,因此其d为3。
应理解,上面以Googel Dremel的数据存储格式示出document数据模型中的数据只是一种示例性说明。本发明实施例中的数据不限于Googel Dremel的数据存储格式,也可以使用其他的列数据存储格式存储,如SequoialDB、MongoDB等,或Wiredtiger、Vertica、GreenPlum等。
若要从图1至图3的8个表格所示的列数据中查询feed_name为title4且feed_id为3的user_id和feed_commit,这里的“feed_name为title4且feed_id为3”是数据查询的条件,定义为查询条件,user_id和feed_commit是要查找的结果,定义为查询目标,可以输入查询语句“Select user_id,feed_commit from test where feed_name=‘title4’andfeed_id=3”。查询语句中的查询条件为“feed_name=‘title4’and feed_id=3”,查询目标为“user_id,feed_commit”。当然,本发明实施例中的查询语句不限于上述格式。
采用现有技术中数据查询技术方法具体的查询流程为:先根据查询语句中的查询条件“feed_name=‘title4’and feed_id=3”和查询目标“user_id,feed_commit”确定条件列为feed_name列和feed_id列、确定所要查询输出结果的查询列为user_id列和feed_commit列;然后读取user_id列、feed_commit列、feed_name列和feed_id列中的数据,并逐条将四列中分别对应的数据组成一条条的记录;再根据查询条件筛选记录中符合条件的数据,从而得到查询结果:user_id为1,feed_commit为fgfghfg5。
由此可以看出,现有技术中该数据查询方法对于带条件的查询语句,需要将查询列和条件列组合在一起,而每次组合都需要逐条遍历扫描各列,因此查询效率较低。
图4为本发明一个实施例的基于document数据模型的数据查询方法的示例性流程图。图4所示的数据查询方法可具体由数据库系统中的数据管理系统来执行。应用图4所示的数据查询方法的数据库系统中的列存储数据库包括n个列,这n个列中的每个列包括至少一个数据值,n≥1。
S401,确定查询条件和查询目标。
本发明实施例的数据查询方法,应该先确定查询条件和查询目标。确定查询条件和查询目标具体可以是从查询语句中获取。
查询语句可以包括一个或多个查询条件,也可以包括一个或多个查询目标。如,查询语句“Select user_id from test where feed_name=‘title4’”中包括一个查询条件“feed_name=‘title4’”和一个查询目标“user_id”,查询语句“Select user_id,feed_commit from test where feed_name=‘title4’”中包括一个查询条件“feed_name=‘title4”和两个查询目标“user_id”、“feed_commit”,查询语句“Select user_id,feed_commit from test where feed_name=‘title4’and feed_id=3”中包括两个查询条件“feed_name=‘title4’”、“feed_id=3”和两个查询目标“user_id”、“feed_commit”。
S402,根据查询条件将n个列中的n1个列分别确定为条件列,n1≥1。
条件列由查询条件决定,存储有查询条件中相应数据的数据列就是条件列。如,查询条件为“feed_name=‘title4’”时,可以将如图2(b)所示的存储feed_name对应的数据的数据列确定为条件列;查询条件为“feed_id=3”和“feed_name=‘title4’”时,同时将如图2(a)所示的存储feed_id对应的数据的数据列和如图2(b)所示的存储feed_name对应的数据的数据列确定为条件列。
S403,根据查询目标将n个列中的n2个列分别确定为查询列,n2≥1。
查询列由查询目标决定,通常,存储有查询目标中相应数据的数据列就是查询列。如查询目标为“user_id”时,可以将如图1(a)所示的存储user_id对应的数据的数据列确定为条件列;如查询目标为“user_id”和“feed_commit”时,可以将如图1(a)所示的存储user_id对应的数据的数据列确定为条件列和如图2(c)所示的存储feed_commit对应的数据的数据列确定为条件列。
S404,根据查询条件生成n1个条件列中每个条件列的位图(bitmap),该位图表示与位图中的状态值一一对应的数据值是否满足查询条件。
bitmap可以是一个队列,也可以是一个数组,本发明对此不作限制。
根据查询条件生成条件列的bitmap的具体实现方式的一个例子为:根据查询条件筛选条件列中的数据值,若某个数据值满足查询条件,则将bitmap中与该数据值的位置相同的值置为表示该数据值满足查询条件的值(如1);若该数据值不满足查询条件,则将bitmap中与该数据值的位置相同的值置为表示该数据值不满足查询条件的值(如0)。
如,查询条件为“feed_id=3”,条件列为如图2(a)所示的数据列时,该条件列的bitmap的一个示例如图5中的表格所示。图5的表格中,0表示图2(a)所示的feed_id列的对应位置的数据值不符合查询条件,1表示图2(a)所示的feed_id列的对应位置的数据值符合查询条件。具体而言,就是feed_id列中第三个和第五个数据值为3,其余的数据值不是3。
再如,查询条件为“user_id=1”,条件列为图1(a)所示的数据列时,该条件列的bitmap的一个示例如图6中的表格所示。图6中,0表示图1(a)所示的user_id列的对应位置的数据值不符合查询条件,1表示图1(a)所示的user_id列的对应位置的数据值符合查询条件。具体而言,就是user_id列中第1个数据值为1,第二个数据值不是1。
又如,查询条件为“commit_id>=6”,条件列为图3(a)所示的数据列时,该条件列的bitmap的一个示例如图7所示。图7中,0表示图3(a)所示的commit_id列的对应位置的数据值不符合查询条件,1表示图3(a)所示的commit_id列的对应位置的数据值符合查询条件。具体而言,就是commit_id列中第四、第七、第八、第九和第十个数据值为大于或等于6,其余的数据值小于6。
当然,条件列的bitmap中也可以用0表示条件中对应的值符合查询条件,用1表示条件列中对应的值不符合查询条件,本发明对bitmap中用于表示条件列中的值是否满足查询条件的值不作限制。
S405,根据n1个条件列的位图生成n2个查询列的位图,该位图表示与位图中的状态值一一对应的数据值是否满足查询条件。
本发明实施例中的数据库系统中的数据列可以只有一个层次,也可分为多个层次。
当n1个条件列只有一个层次时,可以直接根据查询条件生成条件列的bitmap,具体实施方式可以为:先根据查询条件生成每个条件列的bitmap,然后将所有条件列的bitmap按照查询条件中的逻辑关系进行逻辑操作,以得到该层次的条件列的bitmap。
当n1个条件列属于多个层次时,根据查询条件生成n1个条件列中每个条件列的bitmap具体可以为:先根据n1个条件列中属于m1个层次中的第i个层次的各个列的bitmap生成第i个层次的bitmap,m1≥i≥1,以得到m1个层次中每个层次的bitmap。此时,具体实施方式可以是根据查询条件生成第i个层次的每个条件列的bitmap,然后将第i个层次中所有条件列的bitmap按照查询条件中的逻辑关系进行逻辑操作,以得到第i个层次的bitmap。然后根据m1个层次的bitmap生成n2个查询列中属于m2个层次中的第j个层次的m1个子bitmap,m2≥j≥1,具体实现方式可以为:根据第i个层次的位图得到n2个查询列中属于m2个层次中的第j个层次的第i个子位图,第j个层次总共得到m1个子bitmap。最后根据查询条件中的逻辑关系对第j个层次的m1个子bitmap进行逻辑操作,以生成第j个层次的bitmap。此时根据n2个查询列的bitmap从n2个查询列中获取查询结果,具体实现方式可以为:根据第j个层次的bitmap从n2个查询列中属于第j个层次的查询列中获取查询结果。
当这些数据列分为多个层次时,数据列还可以包括重复路径信息,英文名称可以为repetition level,简称r。重复路径信息表示数据值的路径重复的层次,即在哪个层次上出现多个值。此时,根据m1个层次的bitmap生成n2个查询列中属于m2个层次中的第j个层次的m1个子bitmap具体可以为:若m1个层次中的第i个层次比m2个层次中的第j个层次深(也可以说m1个层次中的第i个层次大于m2个层次中的第j个层次),根据第i个层次的bitmap和属于第i个层次的任意一个列的重复路径信息,生成第j个层次的第i个子bitmap;若第i个层次等于第j个层次,将第i个层次的bitmap确定为第j个层次的bitmap;若第i个层次比第j个层次浅(即第i个层次小于第j个层次),根据第i个层次的bitmap和属于第j个层次的任意一个列的重复路径信息,生成第j个层次的第i个子bitmap。
若n1个条件列中,m1个层次中的第i个层次只包括一个条件列,则该条件列的bitmap即为第i个层次的bitmap。若若n2个条件列中,m2个层次中的第j个层次只包括一个查询列,则第j个层次的bitmap即为该查询列的bitmap。
接下来详细介绍条件列的层次比查询列的层次深时,根据第i个层次的位图和属于第i个层次的任意一个列的重复路径信息,生成所述第j个层次的第i个子bitmap的方法。
根据第i个层次的位图和属于第i个层次的任意一个列的重复路径信息,生成查询列中第j个层次的第i个子bitmap的方法具体为:确定属于第i个层次的某个列中表示路径重复的层次小于或等于第j个的层次的所有重复路径信息,为了后续叙述方面,将这些重复路径信息称为第一重复路径信息集合;确定条件列的bitmap中表示数据值满足查询条件的值的在该bitmap中的位置,为了后续描述方便,将其称为第一位置;确定条件列的所有重复路径信息中位于第一位置的重复路径信息,为了后续叙述方便,将其成为第一重复路径信息;若第一重复路径信息表示的路径重复的层次小于或等于第j个层次,则确定第一重复路径信息在第一重复路径信息集合中的位置,为了后续叙述方便,将其称为第二位置,然后将第j个层次的bitmap中位于第二位置的值置为表示数据值为输出结果的值;若该重复路径信息表示的路径重复的层次大于查询列的层次时,则确定条件列的所有重复路径信息中第一重复路径信息之前的第一个小于或等于查询列的层次的重复路径信息在第一重复路径信息集合中的位置,为了后续叙述方便,将其称为第三位置,然后将查询列的bitmap中位于第三位置的值置为表示数据值符合查询条件。
图8为本发明一个实施例的根据条件列的bitmap和条件列的重复路径信息生成查询列的bitmap的方法的示例性流程图。图8中所示的条件列为图3(a)所示的数据列,条件列的bitmap为图7所示的队列,条件列为第三层次,查询列为第一层次。
从图8中可以看到,由于查询列为第一层次,因此在条件列的所有重复路径信息中,小于或等于第一层次的重复路径信息包括第一个1和第二个1,为了叙述方便,将这两个1组成的重复路径信息集合称为第一重复路径信息集合。条件列的bitmap中的第一个1位于条件列的bitmap的第四个位置,由此确定条件列中的第四个重复路径信息,该重复路径信息为3。则根据条件列的bitmap的重复路径信息中,该重复路径信息(3)之前的第一个小于或等于1的重复路径信息为第一个重复路径信息,该重复路径信息为第一重复路径信息集合中的第一个,因此可以确定条件列中的第四个数据值与查询列中的第一个数据值相对应。因此若1表示条件列中的数据值符合查询条件,则说明将查询列中的第一个数据值为查询结果,所以可以将查询列的bitmap中的第一个值置1。
同理,可以确定条件列中的第七个数据值与查询列中的第二个数据值相对应。因此若1表示条件列中的数据值符合查询条件,则说明将查询列中的第二个数据值为查询结果,所以可以将查询列的bitmap中的第二个值置1。
同理,可以确定条件列中的第八个数据值与查询列中的第二个数据值相对应。因此若1表示条件列中的数据值符合查询条件,则说明将查询列中的第二个数据值为查询结果,所以可以将查询列的bitmap中的第二个值置1。
同理,可以确定条件列中的第九个数据值与查询列中的第二个数据值相对应。因此若1表示条件列中的数据值符合查询条件,则说明将查询列中的第二个数据值为查询结果,所以可以将查询列的bitmap中的第二个值置1。
同理,可以确定条件列中的第十个数据值与查询列中的第二个数据值相对应。因此若1表示条件列中的数据值符合查询条件,则说明将查询列中的第二个数据值为查询结果,所以可以将查询列的bitmap中的第二个值置1。
最终可以得到图8中所示的第一层次的bitmap。
接下来详细介绍根据第i个层次的bitmap和查询列中属于第j个层次的列的重复路径信息生成第j个层次的第i个子bitmap的方法。
根据第i个层次的bitmap和第j个层次中任意一个列的重复路径信息生成所述第j个层次的第i个子bitmap的方法具体可以为:确定第j个层次的任意一个列中表示路径重复的层次小于或等于条件列的层次的所有重复路径信息,为了后续叙述方面,将这些重复路径信息称为第一重复路径信息集合;确定条件列的bitmap中表示数据值满足查询条件的值的在该bitmap中的位置,为了后续描述方面,将其称为第一位置;确定第一重复路径信息集合中第一位置的重复路径信息为所有的重复路径信息中的位置,为了后续方便,将该位置称为第二位置;确定第一重复路径集合中第一重复路径信息后的第一个重复路径信息在第j个层次的列的所有重复路径中的位置,为了后续叙述方面,将该位置称为第三位置;将第j个层次的bitmap中从第一位置开始到第二位置之前的值置为表示数据值满足查询条件。
图9为本发明一个实施例的根据条件列的bitmap和属于第j个层次的列的重复路径信息生成第j个层次的bitmap的方法的示例性流程图。图9中所示的查询列为图3(a)所示的数据列,条件列的bitmap为图5所示的bitmap,条件列为第二层次,查询列为第三层次。
图9中,查询列的重复路径信息中包括6个表示小于或等于查询列的层次的重复路径信息,为了后续叙述方便,将这些重复路径信息称为第一重复路径信息集合,第一重复路径信息集合包括1、2、2、1、2、2。条件列的bitmap中表示满足查询条件的状态值1在该bitmap中的位置为3,可以将3称为第一位置。再确定查询列的所有重复路径信息中位于第一位置的重复路径信息(即第二个2)在查询列的所有重复路径信息中的位置为5,为了后续叙述方便,将该位置称为第二位置。然后确定第一重复路径信息集合中的第一位置的下一个位置的重复路径信息(即第二个1)在查询列的所有重复路径中的位置为6,为了后续叙述方便,将该位置称为第三位置。最后,将查询列的bitmap中第二位置开始(含第二位置)至第三位置之前(不含第三位置)的状态值置为表示数据值满足查询条件,即查询列的第5个状态值置为1。
同理,可以确定条件列的bitmap中第二个表示数据值满足查询条件的状态值(第二个1)与查询列中的第七至第九个数据值相对应(此时的第二位置为7,第三位置为10)。因此若1表示条件列中的数据值符合查询条件,则说明可以将查询列的bitmap中的第七至第九个值置1。
最终,可得到如图9中所示的第三层次的bitmap。
图8和图9介绍的是根据条件列中一个层次的bitmap生成查询列的一个层次的bitmap的例子,当条件列中包含多个层次时,分别根据每个层次的bitmap生成第j个层次的子bitmap后,还需要根据查询条件中的逻辑关系对这些子bitmap进行逻辑操作,以得到第j个层次的bitmap。
如由查询语句“Select user_id from test where feed_name=‘title4’andcommit_id≥6”中可知,条件列feed_name和commit_id分别为第二层次和第三层次,查询列user_id属于第一层次。此时分别根据第二层次和第三层次的bitmap生成第一层次的两个子bitmap,然后根据查询条件中feed_name和commit_id之间的逻辑与关系对第一层次的两个子bitmap进行逻辑与操作,最后得到第一层次的bitmap。
图10为本发明一个实施例的数据查询方法的示意性流程图。图10详细介绍查询语句为“Select feed_name from test where user_id=1 and commit_id≥6”时,如何根据user_id列的bitmap和commit_id列的bitmap进行逻辑关系处理得到feed_name列的bitmap。
图10中,user_id列的bitmap如图6所示,commit_id列的bitmap如图7所示,commit_id列如图3(a)所示,feed_name列如图2(b)所示。
由于条件列中第一层次的列只有user_id列,所以user_id列的bitmap即为第一层次的bitmap;条件列中第三层次的列只有commit_id列,所以commit_id列的bitmap即为第三层次的bitmap;查询列中第二层次的列只有feed_name列,所以第二层次的bitmap即为feed_name列的bitmap。
由图10可以看到,根据commit_id列的bitmap和commit_id列的重复路径信息生成feed_name列的子bitmap 1;根据user_id列的bitmap和feed_name列的路径重复信息生成feed_name列的子bitmap 2。根据查询条件中user_id=1与commit_id≥6之间为逻辑与的关系,因此对feed_name列的子bitmap 1和feed_name列的子bitmap 2进行逻辑与,从而得到feed_name列的bitmap。
图10中,为了清楚地体现出根据子bitmap生成查询列的bitmap的过程,因此以两个队列来分别体现不同的子bitmap,但是实际的数据查询方法中,多个子bitmap可以共用一个队列,此队列即为查询列的bitmap。此时,先根据某个层次的bitmap生成查询列的子bitmap,然后根据其他层次的bitmap生成的查询列的子bitmap不再记录在新的队列中,而是直接根据查询条件中的逻辑关系将新生成的子bitmap与原子bitmap进行逻辑关系操作,并将结果记录在原子bitmap中。这样,不论有多少个bitmap,都只需要使用一个队列即可生成查询列的bitmap,从而节省内存。
本发明实施中,若条件列中有多个条件列属于同一个层次时,分别根据查询条件生成这多个条件列的bitmap后,可以根据查询条件中的逻辑关系对这多个条件列的bitmap进行逻辑操作,以得到这多个条件列所属的层次的bitmap。
S406,根据n2个查询列的位图和n2个查询列获取查询结果。
若根据n1个条件列的bitmap生成n2个查询列的bitmap的具体实现方式为:根据n1个条件列中属于m1个层次中的第i个层次的所有列的bitmap生成第i个层次的bitmap,以得到m1个层次中每个层次的bitmap;根据m1个层次的bitmap生成n2个查询列中属于m2个层次中的第j个层次的m1个子bitmap;根据查询条件中的逻辑关系对第j个层次的m1个子bitmap进行逻辑操作,以生成第j个层次的bitmap。此时,根据n2个查询列的位图和n2个查询列获取查询结果的具体实现方式可以是:根据第j个层次的bitmap从n2个查询列中属于第j个层次的查询列中获取查询结果。
根据第j个层次的bitmap从n2个查询列中属于第j个层次的查询列中获取查询结果时,可以先确定第j个层次的bitmap中表示符合查询条件的值的位置,查询列中与第j个层次的bitmap中表示符合查询条件的值的位置相同的数据值即为查询结果。
根据本发明的数据查询方法,先根据查询语句中的查询条件和查询目标分别确定条件列和查询列,然后生成表示条件列中的值是否满足查询条件的位图,在根据位图对查询列进行查询,从查询列中得到查询结果。本发明的数据查询方法只需查询条件列和查询列对应的列数据即可实现查询,从而提高了数据查询的效率。
图11为本发明一个实施例的基于document数据模型的数据库系统的框架示意图。图11所示的数据库系统包括确定模块1101,生成模块1102和获取模块1103。
确定模块1101用于确定查询条件和查询目标。确定模块1101还用于根据查询条件将n个列中的n1个列分别确定为条件列和所述查询目标将n个列中的n2个列分别确定为查询列,n1≥1,n2≥1。确定模块1101也可以称为解析模块。
生成模块1102用于:根据查询条件生成n1个条件列中每个条件列的位图,位图表示与位图中的状态值一一对应的数据值是否满足查询条件;根据n1个条件列的位图生成n2个查询列的位图,位图表示与位图中的状态值一一对应的数据值是否满足查询条件。生成模块1102也可以称为处理模块。
获取模块1103用于根据n2个查询列的位图从n2个查询列获取查询结果。
根据本发明的数据库系统,先根据查询语句中的查询条件和查询目标分别确定条件列和查询列,然后生成表示条件列中的值是否满足查询条件的位图,在根据位图对查询列进行查询,从查询列中得到查询结果。本发明的数据查询方法只需查询条件列和查询列对应的列数据即可实现查询,从而提高了数据查询的效率。
应理解,图11所示的本发明实施例的数据库系统中的各个单元的上述和其它操作和/或功能分别为了实现图4中的数据查询方法的相应流程,为了简洁,在此不再赘述。
图12为本发明另一个实施例的基于document数据模型的数据库系统的框架示意图。
图12所示的数据库系统包括处理器1210、存储器1220、总线系统1230、接收器1240和发送器1250。其中,处理器1210、存储器1220、接收器1240和发送器1250通过总线系统1230相连,该存储器1220用于存储指令,该处理器1210用于执行该存储器1220存储的指令,以控制接收器1240接收信号,并控制发送器1250发送信号。其中,该处理器1210用于确定查询条件和查询目标;根据查询条件将n个列中的n1个列分别确定为条件列,n1≥1;根据查询目标将n个列中的n2个列分别确定为查询列,n2≥1;根据查询条件生成n1个条件列中每个条件列的位图,所述位图表示与位图中的状态值一一对应的数据值是否满足查询条件;根据n1个条件列的位图生成n2个查询列的位图,所述位图表示与位图中的状态值一一对应的数据值是否满足查询条件;根据n2个查询列的位图和n2个查询列获取查询结果。
根据本发明的数据库系统,先根据查询语句中的查询条件和查询目标分别确定条件列和查询列,然后生成表示条件列中的值是否满足查询条件的位图,在根据位图对查询列进行查询,从查询列中得到查询结果。本发明的数据查询方法只需查询条件列和查询列对应的列数据即可实现查询,从而提高了数据查询的效率。
应理解,图12所示本发明实施例的数据库系统可对应于图11所示的数据库系统,并且本发明实施例的数据库系统中的各个单元的上述和其它操作和/或功能分别为了实现图4中的数据查询方法的相应流程,为了简洁,在此不再赘述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。