基于列存储的数据查询方法、装置、服务器及存储介质与流程

文档序号:16248554发布日期:2018-12-11 23:48阅读:220来源:国知局
本发明实施例涉及数据查询技术,尤其涉及一种基于列存储的数据查询方法、装置、服务器及存储介质。
背景技术
:随着大数据技术的不断发展,数据库中包含的数据量急剧增加,对传统的基于行存储模式的查询性能提出了挑战。目前,为了提高数据库查询性能,人们开始考虑一种与传统行存储不同的存储方式——列存储。列存储技术是将数据表以列为单位进行存储,相同列的数据存储在一个数据文件中或者按照数据规模存储在多个文件中。但是,列存储方式的使用还在起步阶段,还需进行研究,以提高数据的查询效率。技术实现要素:有鉴于此,本发明实施例提供一种基于列存储的数据查询方法、装置、服务器及存储介质,以提高数据的查询效率。第一方面,本发明实施例提供了一种基于列存储的数据查询方法的方法,所述方法,包括:获取查询语句;根据所述查询语句,确定查询指定列和查询条件;根据所述指定列、所述查询条件以及列存储辅助表中的统计信息和控制信息,定位到列存储表中对应的数据区;在所述数据区中获取满足所述查询条件的数据。第二方面,本发明实施例还提供了一种基于列存储的数据查询的装置,所述装置,包括:第一获取模块,用于获取查询语句;确定模块,用于根据所述查询语句,确定查询指定列和查询条件;定位模块,用于根据所述指定列、所述查询条件以及列存储辅助表中的统计信息和控制信息,定位到列存储表中对应的数据区;第二获取模块,用于在所述数据区中获取满足所述查询条件的数据。第三方面,本发明实施例还提供了一种服务器,包括:一个或多个处理器;存储装置,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任一实施例所述的基于列存储的数据查询方法。第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明任一实施例所述的基于列存储的数据查询方法。本发明实施例提供的技术方案,根据查询指定的列和查询条件通过与列存储辅助表中的统计信息作比较之后定位到对应的数据区,在定位得到的数据区中获取满足查询条件的数据,不必读取所有数据区的数据,提高了数据的查询效率。附图说明图1是本发明实施例一提供的基于列存储的数据查询方法的流程图;图2是本发明实施例二提供的基于列存储的数据查询方法的流程图;图3是本发明实施例三提供的基于列存储的数据查询方法的流程图;图4是本发明实施例四提供的基于列存储的数据查询装置的结构示意图;图5是本发明实施例五提供的一种服务器的结构示意图。具体实施方式下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。实施例一图1是本发明实施例一提供的一种基于列存储的数据查询方法的流程图,本实施例可适用于数据查询系统,该方法可以由基于列存储的数据查询装置来执行,该装置可以由软件和/或硬件来实现,一般可集成在服务器中,如图1所示,本实施例提供的技术方案具体如下:步骤110,获取查询语句。当用户有查询需求时,可以通过数据查询装置输入查询语句,示例性地,可以通过查询装置中运行的数据查询系统所提供的用户接口组件输入查询语句,以sparksql系统为例,主要用于处理结构化与半结构化数据,具体可以是json、hivetables以及parquet。用户输入的查询语句的类型本实施例不做限定,可以根据数据查询系统所支持的语言而定,示例性地,对于sparksql系统来说,支持sql等语句。数据查询语句可以包含查询语句的字段名称、字段类型等。所述字段名称是用户输入的待查询字段,具体可以是名称字段、年龄字段等,字段类型为客户端指定的字段名称的数据类型,具体可以是字符型、数值型、时间类型和复合类型等。步骤120,根据所述查询语句,确定查询指定列和查询条件。查询语句中一般会包括查询指定列和查询条件。在本实施例中,当接收到用户输入的查询语句后,会根据查询语句的内容确定所要查询的内容所在的列及对应的查询条件。查询条件可以包括单条件查询和多条件查询,具体根据用户需要进行设置,示例性地可以是,selectc1fromtwherec1>10000,其中,查询指定列为表t中的c1列,查询条件为查询表t中c1列中大于10000的数据。步骤130,根据所述指定列、所述查询条件以及列存储辅助表中的统计信息和控制信息,定位到列存储表中对应的数据区。本实施例中,提供了一种分区存储数据的列存储规则,同一列数据直接存储在一个数据文件或按照数据规模存储在多个数据文件中,并辅以列存储辅助表。每一列数据按照一定的预先设定的行数进行分区存储,这样的区称为数据区,预先设定的行数称为区大小。同一个数据区中的数据存储在同一个数据文件中,一个数据文件可以存储一到多个数据区。其中,列存储辅助表用于记录每个列的每个区在数据文件中的偏移地址和数据长度等控制信息,以及每个区中存储的列值的最大值和最小值等统计信息。可选的,列存储辅助表的结构如下,其中的统计信息为辅助表查询使用。表1列存储辅助表结构下面对上述列存储表的结构进行解释说明:1)列号:该列在创建表时表定义中对应的序号;2)区号:不同的数据区会有不同的编号,数据区所对应的编号为区号;3)文件号:数据文件所对应的文件编号;4)文件中的偏移:当前数据区在数据文件中的偏移字节,例如,若三个数据区保存到同一个数据文件中,则第一个数据区的文件中的偏移为0,第二个数据区的文件中的偏移为第一个数据区占用的数据空间,第三个数据区的文件中的偏移为第一个和第二个数据区占用的数据空间。5)区大小:数据区所能存储数据的总行数,是用户预先设定的;6)区内有效数据行数:去除删除数据后数据区中数据的行数;7)数据占用空间大小:数据存储所占用的字节数;8)包括的空(null)值的行数:数据区中的数据中空值所占的行数;9)所有数据互不相同的行数:列存储表中所存储的数据中互不相同的数据所占的行数;10)区内最大值:数据区中的最大数据值;11)区内最小值:数据区中的最小数据值;12)区内所有值的和:数据区内所有数据值得总和。其中,列存储辅助表中的列号、区号、文件号、数据占用空间大小、文件中的偏移为控制信息;区内最大值、区内最小值、区内所有值的和、区大小、区内有效数据行数、包括的空值的行数及所有数据互不相同的行数为统计信息。由于列存储辅助表中存储着各数据区的统计信息,对于一些条件查询可以根据列存储辅助表中的统计信息,从而再根据对应的控制信息直接定位到需要查询的数据所在的数据区。示例性地:查询语句为selectc1fromtwherec1>10000,通过找到表t对应的列存储辅助表,根据统计信息中的最小值就可以获取到c1列的大于10000的数据所在的数据区,只需读取该数据区的数据,而不需要读取c1列的所有数据区的数据,大幅减少了数据io。步骤140,在所述数据区中获取满足所述查询条件的数据。根据所述指定列、所述查询条件以及列存储辅助表中的统计信息,定位到列存储表中对应的数据区之后,只需读取该数据区的数据,对于一些条件查询就可以只在对应的数据区中查询满足查询条件的数据,不需要将该列的数据区全部读取出来,对每条记录逐个对比来查询数据。本实施例提供了一种列存储表的存储规则,即将每一列数据按照一定的预先设定的行数进行分区存储,这样的区称为数据区。同一列数据直接存储在一个文件或按照数据规模存储在多个文件中,并辅以列存储辅助表,该表用于存储各数据区的统计信息。本实施例的技术方案,根据查询指定列和查询条件,通过与列存储辅助表中的统计信息作比较之后就可以直接定位到对应查询数据所在的数据区,在该数据区中获取满足查询条件的数据,而不必读取所述指定列对应的所有的数据区,提高了数据的查询效率。实施例二图2给出了本发明实施例二提供的一种基于列存储的数据查询的方法的流程图。本实施例以上述实施例为基础,提供一种优选的实施例,未在本实施例中详尽描述的细节参见上述实施例一。如图2所示,本实施例提供的一种基于列存储的数据查询的方法,包括以下步骤:步骤210、获取查询语句。步骤220,根据所述查询语句,确定查询指定列和查询条件。步骤230,根据所述指定列、所述查询条件以及列存储辅助表中的统计信息和控制信息,定位到列存储表中对应的数据区。步骤240,根据所述数据区、对应的删除辅助表中的删除记录、更新辅助表中的更新记录及插入辅助表中的插入记录,获取所述查询语句对应的有效数据。其中,删除辅助表用于按照数据区记录每个数据区中的删除的数据,具体的,删除辅助表可以记录要删除的数据所在的行号,在删除的数据为连续多行的数据时,可以记录要删除的数据的起始行号及对应的删除行数。可选的,可以预先定义删除辅助表的结构,即定义需要记录的内容,及该内容的具体类型,本实施例中删除辅助表的表结构如下:表2:删除辅助表结构列名类型说明start_idbigint起始行号countint删除的行数更新辅助表用于记录列存储表中的各个数据区中的更新数据,其中一条更新记录包括行号、列号和更新后的值。本实施例中更新辅助表的表结构如下:表3:更新辅助表结构列名类型说明colidsmallint更新的列号dta_rowidbigint更新的行号valuevarbinary(8188)更新后的值更新辅助表用于列存储表数据的更新。对列存储表执行更新操作时,把更新的数据的行号,列号以及更新后的数据记录在更新辅助表中。可选的,本实施例中插入辅助表的结构为行存储的形式,用于缓存向列存储表插入的数据,且缓存的数据的行数小于列存储表中的数据区的区大小。当插入辅助表中的数据行数达到区大小时,把插入辅助表中的数据以列为单位写入每个列对应的数据文件,然后清空插入辅助表。本实施例使得频繁小数据量的插入先把数据插入到插入辅助表中,等到插入辅助表中的数据行数达到区大小时再写入到数据文件中,避免对数据文件频繁的读写,减小了io,提升了效率。在已经定位到对应的数据区后,该数据区中的数据不一定都是有效数据,由于进行更新和删除时并没有真正对数据文件中的数据区中的数据进行更新和删除,而是将更新记录到了更新辅助表中,将删除记录到了删除辅助表中,因此需要根据更新辅助表对数据区中的数据进行更新,并根据删除辅助表将数据区中的对应数据删除,获取更新及删除后的合并数据,还需要根据查询语句确定插入辅助表中是否有对应的数据,在插入辅助表中有对应的数据时,获取该数据,获取到的该数据及上述的更新及删除后的合并数据为所述查询语句对应的有效数据。步骤250,根据所述查询条件,对所述有效数据进行过滤,得到满足所述查询条件的数据。根据用户输入的查询条件,在获取的查询语句对应的有效数据中筛选出用户需要的数据,提高了查询效率。需要说明的是,在列存储表的数据经过较多的增、删、改操作后,存在各个辅助表数据膨胀的问题,会降低数据查询的效率。因此,可选的,在系统较为空闲或对该列存储表不进行操作时,对该列存储表进行数据重整,即把插入辅助表、删除辅助表和更新辅助表中的数据都写入数据文件中,然后把插入辅助表、删除辅助表和更新辅助表清空,保证数据查询的效率。本实施例的技术方案,根据查询指定的列和查询条件,定位到对应查询数据所在的数据区之后,根据所述数据区、对应的删除辅助表中的删除记录、更新辅助表中的更新记录及插入辅助表中的插入记录,获取所述查询语句对应的有效数据,然后根据用户输入的查询条件对所述有效数据进行过滤,得到满足查询条件的数据,提高了数据的查询效率。实施例三图3给出了本发明实施例二提供的一种基于列存储的数据查询的方法的流程图。本实施例以上述实施例二为基础,提供一种优选的实施例,未在本实施例中详尽描述的细节参见上述实施例二。如图3所示,本实施例提供的一种基于列存储的数据查询的方法,包括以下步骤:步骤310,获取查询语句。步骤320,根据所述查询语句,确定查询指定列和查询条件。步骤330,根据所述指定列、所述查询条件以及列存储辅助表中的统计信息和控制信息,定位到列存储表中对应的数据区。步骤340,根据所述数据区及所述删除辅助表中的删除记录,确定所述数据区中的实际数据。首先获取定位到的数据区中的数据,该数据区中的数据包括删除辅助表中的删除记录中要删除的数据,因此,先根据删除辅助表中的删除记录,将数据区中的数据删除掉所述删除记录对应的数据后,得到数据区中的实际数据。可选的,根据所述数据区及所述删除辅助表中的删除记录,确定所述数据区中的实际数据,包括:根据所述数据区,查询删除辅助表中是否有对应的删除记录;若所述删除辅助表中有对应的删除记录,则在获取所述数据区的数据后与所述删除记录中的数据进行合并,合并后的数据作为所述实际数据;若所述删除辅助表中没有对应的删除记录,则将所述数据区的数据作为所述实际数据。步骤350,根据所述数据区及所述更新辅助表中的更新记录,对所述实际数据进行数据更新。由于更新辅助表中记录了要更新的数据,而并没有直接在数据区中进行更新,因此,还需要根据更新辅助表中的更新记录,对实际数据进行更新。步骤360,根据更新后的实际数据,与插入辅助表中的指定列数据进行数据合并,得到所述查询语句对应的有效数据。在插入辅助表中包含查询语句待查询的数据时,还需要将更新后的实际数据与插入辅助表中的指定列数据进行数据合并,从而得到查询语句对应的有效数据。步骤370,根据所述查询条件,对所述有效数据进行过滤,得到满足所述查询条件的数据。本实施例的技术方案,根据查询指定的列和查询条件,定位到对应查询数据所在的数据区,根据所述数据区及所述删除辅助表中的删除记录,确定所述数据区中的实际数据;根据所述数据区及所述更新数据表中的更新记录,对所述实际数据进行数据更新;根据更新后的实际数据,与插入辅助表中的指定列数据进行数据合并,得到所述查询语句对应的有效数据。然后根据用户输入的查询条件对所述有效数据进行过滤,得到满足查询条件的数据。提高了数据的查询效率,而且提高了查询到的数据的正确性。实施例四图4是本发明实施例四提供的一种基于列存储的数据查询装置的流程图,所述装置用于执行基于列存储的数据查询方法。如图4所示,所述装置包括第一获取模块410、确定模块420、定位模块430以及第二获取模块440。其中,第一获取模块410,用于获取查询语句;确定模块420,用于根据所述查询语句,确定查询指定列和查询条件;定位模块430,用于根据所述指定列、所述查询条件以及列存储辅助表中的统计信息和控制信息,定位到列存储表中对应的数据区;第二获取模块440,用于在所述数据区中获取满足所述查询条件的数据。进一步的,所述第二获取模块包括:有效数据获取单元,用于根据所述数据区、对应的删除辅助表中的删除记录、更新辅助表中的更新记录及插入辅助表中的插入记录,获取所述查询语句对应的有效数据;数据过滤单元,用于根据所述查询条件,对所述有效数据进行过滤,得到满足所述查询条件的数据。进一步的,所述有效数据获取单元包括:实际数据确定子单元,用于根据所述数据区及所述删除辅助表中的删除记录,确定所述数据区中的实际数据;数据更新子单元,用于根据所述数据区及所述更新数据表中的更新记录,对所述实际数据进行数据更新;数据合并子单元,用于根据更新后的实际数据,与插入辅助表中的指定列数据进行数据合并,得到所述查询语句对应的有效数据。进一步的,所述实际数据确定子单元具体用于:根据所述数据区,查询删除辅助表中是否有对应的删除记录;若所述删除辅助表中有对应的删除记录,则在获取所述数据区的数据后与所述删除记录中的数据进行合并,合并后的数据作为所述实际数据;若所述删除辅助表中没有对应的删除记录,则将所述数据区的数据作为所述实际数据。上述基于列存储的数据查询装置可执行本发明任意实施例所提供的基于列存储的数据查询方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明任意实施例提供的基于列存储的数据查询方法。实施例五本发明实施例五提供了一种服务器,集成了本发明任意实施例所提供基于列存储的数据查询装置。具体的,如图5所示,本发明实施例提供一种服务器,该服务器包括:一个或者多个处理器510,图5中以一个处理器510为例;存储器520;以及一个或者多个模块。所述服务器还可以包括:输入装置530和输出装置540。所述终端中的处理器510、存储器520、输入装置530和输出装置540可以通过总线或其他方式连接,图5中以通过总线连接为例。存储器520作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的基于列存储的数据查询方法对应的程序指令/模块(例如,附图4所示的第一获取模块410、定位模块420以及第二获取模块430)。处理器510通过运行存储在存储器520中的软件程序、指令以及模块,从而执行终端的各种功能应用以及数据处理,即实现上述方法实施例中的基于列存储的数据查询方法。存储器520可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器520可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器520可进一步包括相对于处理器510远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。输入装置530可用于接收输入的数字或字符信息,以及产生与终端的用户设置以及功能控制有关的键信号输入。输出装置540可包括显示屏等显示设备。上述终端可执行本发明任意实施例所提供的基于列存储的数据查询方法,具备执行方法相应的功能模块和有益效果。实施例六本发明实施例六还提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请所有发明实施例提供的基于列存储的数据查询方法:也即,该程序被处理器执行时实现:获取查询语句;根据所述查询语句,确定查询指定列和查询条件;根据所述指定列、所述查询条件以及列存储辅助表中的统计信息和控制信息,定位到列存储表中对应的数据区;在所述数据区中获取满足所述查询条件的数据。可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、rf等等,或者上述的任意合适的组合。可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1