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

文档序号:16069469发布日期:2018-11-24 13:01阅读:224来源:国知局
本发明实施例涉及数据存储技术,尤其涉及一种数据库的列存储方法、装置、服务器及存储介质。
背景技术
随着大数据技术的不断发展,数据库中包含的数据量急剧增加,对传统的基于行存储模式的查询性能提出了挑战。传统的行存储模式,在查询时如果需要其中某几列的数据,也需要读取所有的行数据,因此,查询效率较低。目前,为了提高数据库查询性能,人们开始考虑一种与传统行存储不同的存储方式——列存储。列存储技术是将数据表以列为单位进行存储,相同列的数据存储在一个数据文件中或者按照数据规模存储在多个数据文件中。但是,列存储方式的使用还在起步阶段,还需进行研究,以提高数据的查询效率。技术实现要素:有鉴于此,本发明实施例提供一种数据库的列存储方法、装置、服务器及存储介质,以提高查询效率。第一方面,本发明实施例提供了一种数据库的列存储方法,所述方法包括:获取待进行列存储的列数据;将所述列数据按照预设行数存储为一个或多个数据区;获取每个数据区的控制信息和统计信息;在预先定义的列存储辅助表中记录每个数据区的控制信息及统计信息。第二方面,本发明实施例还提供了一种数据库的列存储装置,所述装置包括:列数据获取模块,用于获取待进行列存储的列数据;数据区存储模块,用于将所述列数据按照预设行数存储为一个或多个数据区;信息获取模块,用于获取每个数据区的控制信息和统计信息;信息记录模块,用于在预先定义的列存储辅助表中记录每个数据区的控制信息及统计信息。第三方面,本发明实施例还提供了一种服务器,所述服务器包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任一实施例所述的数据库的列存储方法。第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明任一实施例所述的数据库的列存储方法。本发明实施例的技术方案,通过获取待进行列存储的列数据,将所述列数据按照预设行数存储为一个或多个数据区,获取每个数据区的控制信息和统计信息,并记录在预先定义的列存储辅助表中,从而在后续查询时,可以查询列存储辅助表中的控制信息和统计信息,快速定位到满足条件的数据所在的数据区,提高了查询效率。附图说明图1是本发明实施例一提供的一种数据库的列存储方法的流程图;图2是本发明实施例二提供的一种数据库的列存储方法的流程图;图3是本发明实施例中的列存储表的结构图;图4是本发明实施例三提供的一种数据库的列存储装置的结构示意图;图5是本发明实施例四提供的一种服务器的结构示意图。具体实施方式下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。实施例一图1是本发明实施例一提供的一种数据库的列存储方法的流程图,本实施例可适用于对数据库中的数据进行列存储的情况,该方法可以由数据库的列存储装置来执行,该装置可以由软件和/或硬件来实现,一般可集成在服务器中,该服务器可以为数据库服务器。该方法具体包括如下步骤:步骤110,获取待进行列存储的列数据。其中,待进行列存储的数据会包括一列或多列的数据,即待进行列存储的数据是行存储的形式,待进行列存储的数据可以是已有的行存储形式的数据表,也可以是一到多个待插入的数据行。在将行存储形式的数据转换为列存储时,首先需要分离其中的列数据,即分别获取待进行列存储的数据中的单独一列的数据,作为所述列数据。步骤120,将所述列数据按照预设行数存储为一个或多个数据区。获取到列数据后,将列数据分为数据区进行存储,即将列数据中的每预设行数的数据存储为一个数据区,从而将列数据存储为一个或多个数据区,在列数据的数据量较大时,如数据量为预设行数的很多倍,则会存储为多个数据区,在列数据的数据量较小时,如数据量只达到预设行数,则可以存储为一个数据区。在列数据的数据量较小或者存储为整数个数据区后剩余的数据没有达到预设行数,则可将没有达到预设行数的数据插入到插入辅助表中。其中,预设行数即为数据区大小。步骤130,获取每个数据区的控制信息和统计信息。其中,控制信息是指数据区中具有控制性的一些信息,如数据区的列号、区号、该数据区的数据占用空间大小(字节数)等;统计信息是对数据区中的数据进行统计得到的信息,如一个数据区中存储的最大值、最小值、所有值的和及数据区大小(即包括的数据的行数)等。根据预先确定的控制信息获取每个数据区对应的控制信息,根据预先确定的统计信息对数据区中的数据进行统计,得到统计信息。步骤140,在预先定义的列存储辅助表中记录每个数据区的控制信息及统计信息。其中,列存储辅助表用于记录每个数据区的控制信息及统计信息,列存储辅助表是行存储的形式,将每个数据区的控制信息和统计信息对应记录清楚,在对该列存储的数据进行查询时可通过该列存储辅助表进行辅助查询。在将列数据存储为一个或多个数据区后,将每个数据区的控制信息和统计信息对应记录到预先定义的列存储辅助表中。在后续进行查询时,通过列存储辅助表中的控制信息和统计信息,可以快速定位到满足条件的数据所在的数据区。本实施例的技术方案,通过获取待进行列存储的列数据,将所述列数据按照预设行数存储为一个或多个数据区,获取每个数据区的控制信息和统计信息,并记录在预先定义的列存储辅助表中,从而在后续查询时,可以查询列存储辅助表中的控制信息和统计信息,快速定位到满足条件的数据所在的数据区,提高了查询效率。实施例二图2是本发明实施例二提供的一种数据库的列存储方法的流程图,本实施例在上述实施例的基础上进行了优化,具体的,还进行一步包括:按照预设数据规模,将所述一个或多个数据区存储为数据文件。该方法具体包括如下步骤:步骤210,获取待进行列存储的列数据。步骤220,将所述列数据按照预设行数存储为一个或多个数据区。步骤230,将所述一个或多个数据区存储为数据文件。按照预设数据规模,将所述一个或多个数据区存储为一个或多个数据文件。其中,预设数据规模限定了一个数据文件要保存的数据占用的空间大小。同一个数据区中的数据存储在一个数据文件中,一个数据文件按照预设数据规模可以存储一到多个数据区。步骤240,获取每个数据区的控制信息和统计信息。优选的,控制信息包括数据区的列号、区号、数据文件的文件号、该数据区的数据占用空间大小(字节数)及该数据区中的数据在数据文件中的偏移;统计信息包括数据区的区内最大值、区内最小值、区内所有值的和、数据区大小(即包括的数据的行数)、区内有效数据行数、包括的空(null)值的行数及所有数据互不相同的行数中的至少一项。步骤250,在预先定义的列存储辅助表中记录每个数据区的控制信息及统计信息。其中,列存储辅助表的结构是预先定义的,优选地,列存储辅助表在包括上述控制信息和统计信息时的结构如下:表1列存储辅助表的结构列名类型说明colidsmallint列号sec_idint区号file_idint文件号offsetbigint数据文件中的偏移countint数据区大小(行数)acountint区内有效数据行数(去除删除数据的行数)n_lenint数据占用空间大小(字节数)n_nullint包括的null值的行数n_distint所有数据互不相同的行数max_valvarbinary(8188)区内最大值min_valvarbinary(8188)区内最小值sum_valvarbinary(8188)区内所有值的和表1中,列名是定义的保存数据时的列名,将说明中的对应数据保存到对应列名下,类型一列定义了各个列名所存储数据的数据类型。其中,数据文件中的偏移是指当前数据区在数据文件中的偏移字节,例如,若三个数据区保存到同一个数据文件中,则第一个数据区的数据文件中的偏移为0,第二个数据区的数据文件中的偏移为第一个数据区占用的数据空间,第三个数据区的数据文件中的偏移为第一个和第二个数据区占用的数据空间,通过数据文件中的偏移可以快速定位到对应的数据区所在的存储地址。区内有效数据行数记录数据区中的有效数据所占有的行数,因为在删除数据时可以将要删除的数据记录在删除辅助表中,而并不是在数据区中直接删除,所以数据区中可能会存在已经删除的数据,而区内有效数据行数则记录去除了删除辅助表中记录的删除数据后的行数。本实施例的技术方案,在上述实施例的基础上,通过将一个或多个数据区存储为数据文件,从而使得存储有序,而且在进行查询时可以根据控制信息和统计信息快速获取对应数据文件中对应数据区的数据。在上述技术方案的基础上,还可选包括:根据预先定义的插入辅助表的结构,创建插入辅助表,所述插入辅助表用于记录插入的数据。其中,插入辅助表在存储数据时是以行存储的形式进行存储的,插入辅助表的每个列与原始行存储形式的数据(即前述的待进行列存储的数据)的每个列按序对应,用于记录行数还不足一个数据区大小的插入数据。当插入辅助表中的数据的行数达到数据区大小时,把插入辅助表中的数据以列为单位存储为数据区,即将一个列存储为一个数据区,并将各个数据区写入每个列对应的数据文件,之后清空插入辅助表。通过创建插入辅助表来记录插入的数据,可以提高数据的插入效率。在上述技术方案的基础上,还可选包括:根据预先定义的删除辅助表的结构,创建删除辅助表,所述删除辅助表用于记录所述一个或多个数据区中被删除的数据。其中,删除辅助表在存储数据时是以行存储的形式进行存储的,主要记录被删除数据的起始行号和删除的行数。可选的,预先定义的删除辅助表的结构如下:表2删除辅助表的结构列名类型说明start_idbigint起始行号countint删除的行数对数据表执行删除操作时,并不真正删除数据文件中对应数据区中的数据,而是将删除的数据的行号记录在删除辅助表中,为了减少删除辅助表中的数据行数,在被删除的数据为连续几行的数据时可以进行合并处理。例如,首先删除了行号为1和3的两条数据,此时删除辅助表中记录有两条,如下表3所示:表3删除辅助表示例1start_idcount1131如果后来又要删除行号为2的数据,则此时删除辅助表的记录合并为1条,如下表4所示:表4删除辅助表示例2start_idcount13可以看出,删除辅助表中记录的是删除的数据段,并且删除辅助表中的一行记录表示的删除数据段内的数据不能跨数据区,即一行记录只能记录同一个数据区中的连续删除的数据。当删除的数据段跨两个数据区时,生成删除辅助表中的两条记录。通过删除辅助表来记录被删除的数据,而不必在对应的数据文件的对应数据区中进行删除,可以提高数据的删除效率。在上述技术方案的基础上,还可选包括:根据预先定义的更新辅助表的结构,创建更新辅助表,所述更新辅助表用于记录所述一个或多个数据区中更新的数据。其中,更新辅助表在存储数据时是以行存储的形式进行存储的,主要记录更新的数据的列号、行号及更新后的值。在对列存储的数据进行更新时,不对数据文件中对应数据区中的数据进行真正更新,而是将更新的数据的列号、行号及更新后的值记录在更新辅助表中。可选的,预先定义的更新辅助表的结构如下:表5更新辅助表的结构列名类型说明colidsmallint更新的列号dta_rowidbigint更新的行号valuevarbinary(8188)更新后的值如表5所示,更新辅助表主要记录更新数据的列号、行号及更新后的值。通过更新的列号和行号可以查询列存储辅助表中的控制信息和统计信息定位到对应的数据区,将数据区的数据读取到内存后,通过更新辅助表中的数据对所涉及的数据进行更新,以保证查询到正确的数据。通过利用更新辅助表来记录更新的数据,而不必在更新一条数据时就对应在数据区中进行更新,提高了数据的更新效率。将数据表中的列数据按照预设行数存储为数据区并存储为数据文件后,对应的数据文件和上述的列存储辅助表、插入辅助表、删除辅助表以及更新辅助表,组成与所述数据表对应的列存储表。图3是本发明实施例中的列存储表的结构图,如图3所示,列存储表包括数据文件以及行存储形式的列存储辅助表、插入辅助表、删除辅助表和更新辅助表,而数据文件中包括多个数据区,其中,col:0sec:0表示列存储表的第一列的第一个数据区,col:0sec:1表示列存储表的第一列的第二个数据区,如此类推,得到数据文件的多个数据区。在列存储表的数据经过较多的增、删、改操作后,可以在系统较为空闲或对该列存储表不进行操作时,对该列存储表进行数据重整,即把插入辅助表、删除辅助表及更新辅助表中的数据都写入数据文件对应数据区中,然后把插入辅助表、删除辅助表及更新辅助表清空,从而保证数据查询的效率。实施例三图4是本发明实施例三提供的一种数据库的列存储装置的结构示意图,本实施例可适用于对数据库中的数据进行列存储的情况,该装置可以执行数据库的列存储方法,该装置可以由软件和/或硬件来实现,一般可集成在服务器中,该服务器可以为数据库服务器。如图4所示,本实施例所述的数据库的列存储装置包括:列数据获取模块310、数据区存储模块320、信息获取模块330和信息记录模块340。其中,列数据获取模块310,用于获取待进行列存储的列数据;数据区存储模块320,用于将所述列数据按照预设行数存储为一个或多个数据区;信息获取模块330,用于获取每个数据区的控制信息和统计信息;信息记录模块340,用于在预先定义的列存储辅助表中记录每个数据区的控制信息及统计信息。可选的,还包括:文件存储模块,用于将所述一个或多个数据区存储为数据文件。可选的,还包括:插入辅助表创建模块,用于根据预先定义的插入辅助表的结构,创建插入辅助表,所述插入辅助表用于记录插入的数据。可选的,还包括:删除辅助表创建模块,用于根据预先定义的删除辅助表的结构,创建删除辅助表,所述删除辅助表用于记录所述一个或多个数据区中被删除的数据。可选的,还包括:更新辅助表创建模块,用于根据预先定义的更新辅助表的结构,创建更新辅助表,所述更新辅助表用于记录所述一个或多个数据区中更新的数据。上述数据库的列存储装置可执行本发明任意实施例所提供的数据库的列存储方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明任意实施例提供的数据库的列存储方法。实施例四图5为本发明实施例四提供的一种服务器的结构示意图,如图5所示,该数据库服务器包括处理器410、存储器420、输入装置430和输出装置440;服务器中处理器410的数量可以是一个或多个,图4中以一个处理器410为例;服务器中的处理器410、存储器420、输入装置430和输出装置440可以通过总线或其他方式连接,图5中以通过总线连接为例。存储器420作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的数据库的列存储方法对应的程序指令/模块(例如,数据库的列存储装置中的列数据获取模块310、数据区存储模块320、信息获取模块330和信息记录模块340)。处理器410通过运行存储在存储器420中的软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述的数据库的列存储方法。存储器420可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据服务器的使用所创建的数据等。此外,存储器420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器420可进一步包括相对于处理器410远程设置的存储器,这些远程存储器可以通过网络连接至服务器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。输入装置430可用于接收输入的数字或字符信息,以及产生与服务器的用户设置以及功能控制有关的键信号输入。输出装置440可包括显示屏等显示设备。实施例五本发明实施例五还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种数据库的列存储方法,该方法包括:获取待进行列存储的列数据;将所述列数据按照预设行数存储为一个或多个数据区;获取每个数据区的控制信息和统计信息;在预先定义的列存储辅助表中记录每个数据区的控制信息及统计信息。当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的数据库的列存储方法中的相关操作。通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。值得注意的是,上述数据库的列存储装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1