首页> 中国专利> openGauss平台下二级分区表的构建方法和构建系统

openGauss平台下二级分区表的构建方法和构建系统

摘要

本发明属于数据库管理系统和计算机软件技术领域,尤其涉及一种openGauss平台下二级分区表的构建方法和构建系统。本发明方法包括:扩展系统表pg_partition的表结构,从建表语句中获取到二级分区的相关信息,将获取到的二级分区信息存储到系统表pg_partition中;从系统表pg_partition中加载二级分区表的所有分区信息;根据数据或查询条件先获取一级分区,再获取该一级分区下对应的二级分区信息,然后对数据进行读写操作。本发明方法能够很好的克服openGauss系统一级分区表划分维度简单,对于包含多层次、大量数据的单张表存在的维护成本高、处理效率低的缺陷。

著录项

  • 公开/公告号CN113868261A

    专利类型发明专利

  • 公开/公告日2021-12-31

    原文格式PDF

  • 申请/专利权人 广州海量数据库技术有限公司;

    申请/专利号CN202111192242.1

  • 发明设计人 冼鸿业;黄晓涛;

    申请日2021-10-13

  • 分类号G06F16/22(20190101);G06F16/28(20190101);

  • 代理机构11723 北京尚钺知识产权代理事务所(普通合伙);

  • 代理人王海荣

  • 地址 510510 广东省广州市天河区建工路4号佳都科技大厦2号楼3F301(仅限办公)

  • 入库时间 2023-06-19 13:29:16

说明书

技术领域

本发明属于数据库管理系统和计算机软件技术领域,尤其涉及一种openGauss平台下二级分区表的构建方法和构建系统。

背景技术

信息化时代时刻都在产生着海量的数据,随着时间的推进,数据库中单张表存储的数据量会变得越来越大,其维护成本越来越高,与此同时,处理该表数据的效率也会明显降低。

openGauss是一款开源关系型数据库管理系统,其内核源自PostgreSQL,作为一个开源、免费的数据库平台,旨在鼓励社区贡献、合作。目前openGauss系统中已经实现了分区表功能,对于一些大数据表,会根据数据的特性和业务需求进行分区,以方便数据管理和维护,但openGauss仅支持一级分区表,当一级分区下数据量依然很大时,数据扩增导致的维护成本增加、处理效率降低的问题并不能得到彻底解决。因此,亟需一种新的能够有效降低数据维护成本、提高数据处理效率的数据管理方法。

发明内容

为了克服openGauss系统一级分区表划分维度简单,对于包含多层次、大量数据的单张表存在维护成本高、处理效率低的缺陷,本发明提供了一套解决方案:本发明在一级分区的基础上,构建了二级分区,可以对数据从两个维度上进行划分,不同类型的分区方式组合起来使得数据的划分变得更加灵活,在实际操作中,本发明构建的二级分区表按照数据特性或业务需求把“相似”的表数据划分到更小的二级分区当中,使得数据划分更加精细和准确,系统在定向处理二级分区上的数据时效率得到显著提高,数据的维护成本也随之降低。

第一方面,本发明提供了一种openGauss平台下二级分区表的构建方法,所述方法是在openGauss一级分区表的基础上,实现二级分区,具体包括以下步骤:

步骤一:扩展存储分区信息的系统表pg_partition的表结构,从建表语句中获取到二级分区的相关信息,将获取到的二级分区相关信息存储到系统表pg_partition中,同时在系统表pg_partition中存储二级分区的数据字典,表数据实际存储在二级分区中;

步骤二:从系统表pg_partition中加载二级分区表的所有分区信息;

步骤三:当查询或处理二级分区表的数据时,先根据数据或查询条件获取对应的一级分区,再获取该一级分区下对应的二级分区信息,最后根据二级分区的信息对数据进行读写操作。

进一步地,上述方法步骤一中所述扩展系统表pg_partition的表结构,包括在系统表pg_partition中新增4个字段以存储二级分区相关信息,所述4个字段分别用于保存二级分区类型、二级分区键、二级分区模板和二级分区所属的一级分区信息。

进一步地,上述方法步骤一中所述存储二级分区的信息,具体包括以下步骤:

(1)根据二级分区表的语法规则,解析得到语法树,并从语法树中获取到二级分区相关信息,所述二级分区相关信息包括二级分区名、二级分区类型、二级分区键、二级分区规则信息和二级分区模板等;

(2)对获取到的二级分区相关信息进行合法性校验,包括:

a.二级分区类型是否支持;

b.二级分区键类型是否支持;

c.各二级分区之间的规则是否正确,二级分区名是否重复;

d.校验二级分区模板中的二级分区规则是否正确;

(3)存储二级分区信息

a.将相关的二级分区信息由内存存储结构转换为表记录存储结构,以便最终将其保存到系统表pg_partition中;

b.在系统表pg_partition中存储一条记录用于保存分区表的基础信息,除了一级分区相关信息外,还包括二级分区类型、二级分区键和二级分区模板;

c.针对每一个二级分区在系统表pg_partition中都相应地插入一条记录以保存该二级分区的关键信息,所述关键信息包括二级分区名、二级分区类型、物理文件oid、表空间oid、所属的分区oid和二级分区规则等。

进一步地,上述方法步骤二中所述从系统表pg_partition中加载二级分区表的所有分区信息,具体包括以下步骤:

(1)二级分区信息结构体SubpartitionMap的设置:

a.在保存分区信息的结构体PartitionMap中,新增一个SubpartitionMap字段,用于保存每个分区下对应的所有二级分区信息;

b.结构体PartitionMap中每个一级分区规则信息PartElement对应一个二级分区信息结构体SubpartitionMap;

(2)先按照原有流程,加载二级分区表的所有一级分区信息,其中信息都保存在分区信息的结构体PartitionMap中;

(3)加载完一级分区信息后,根据一级分区规则对PartElement进行排序,然后按PartElement顺序加载每个一级分区对应的所有二级分区信息,包括:

a.根据一级分区的oid,从系统表pg_partition中查询到该分区下所有二级分区的记录,从记录中获取二级分区的基本信息和规则信息;

b.获取二级分区类型和二级分区的个数,保存到二级分区信息结构体SubpartitionMap中;

c.获取二级分区键信息,将其转换为内存存储结构后保存到二级分区信息结构体SubpartitionMap中;

d.逐个获取二级分区的规则信息,处理后转换为内存存储结构,保存到SubpartitionMap->PartElement中;

e.根据二级分区规则,对SubpartitionMap->PartElement进行排序;

f.继续处理下一个一级分区的二级分区信息;

(4)把所有一级分区的二级分区信息结构体SubpartitionMap都保存到PartitionMap中。

进一步地,上述方法步骤三中所述获取二级分区信息的方法,具体包括以下步骤:

(1)加载二级分区表的相关信息,其中包括分区信息;

(2)获取目标二级分区:

a.先根据目标数据或条件,从二级分区表的分区信息结构体PartitionMap中查找到匹配的目标分区的信息;

b.根据目标分区信息,获取到对应分区的所有二级分区信息结构体SubpartitionMap;

c.再从上述二级分区信息结构体SubpartitionMap中查找到目标二级分区,并获取目标二级分区信息;

(3)通过二级分区表信息和目标二级分区信息,得到二级分区的完整表信息;

(4)根据二级分区的完整表信息,处理二级分区上的数据。

第二方面,本发明提供了一种openGauss平台下二级分区表的构建系统,所述构建系统包含:

系统表pg_partition扩展模块,其功能为扩展存储分区信息的系统表pg_partition的表结构,从建表语句中获取到二级分区的相关信息,将获取到的二级分区相关信息存储到系统表pg_partition中,同时在系统表pg_partition中存储二级分区的数据字典,表数据实际存储在二级分区中;

信息加载模块,其功能为从系统表pg_partition中加载二级分区表的所有分区信息;

数据获取和处理模块,其功能为当查询或处理二级分区表的数据时,先根据数据或查询条件获取对应的一级分区,再获取该一级分区下对应的二级分区信息,最后根据二级分区的信息对数据进行读写操作。

进一步地,上述构建系统中包含的各功能模块的具体工作程序如下:

系统表pg_partition扩展模块工作程序:

(1)扩展系统表pg_partition的表结构,在系统表pg_partition中新增4个字段以存储二级分区相关信息,所述4个字段分别用于保存二级分区类型、二级分区键、二级分区模板和二级分区所属的一级分区信息;

(2)根据二级分区表的语法规则,解析得到语法树,并从语法树中获取到二级分区相关信息,所述二级分区相关信息包括二级分区名、二级分区类型、二级分区键、二级分区规则信息和二级分区模板等;

(3)对获取到的二级分区相关信息进行合法性校验,包括:

a.二级分区类型是否支持;

b.二级分区键类型是否支持;

c.各二级分区之间的规则是否正确,二级分区名是否重复;

d.校验二级分区模板中的二级分区规则是否正确;

(4)存储二级分区信息

a.将相关的二级分区信息由内存存储结构转换为表记录存储结构,以便最终将其保存到系统表pg_partition中;

b.在系统表pg_partition中存储一条记录用于保存分区表的基础信息,除了一级分区相关信息外,还包括在新增的字段中保存二级分区的信息、二级分区类型、二级分区键和二级分区模板;

c.针对每一个二级分区在系统表pg_partition中都相应地插入一条记录以保存该二级分区的关键信息,所述关键信息包括二级分区名、二级分区类型、物理文件oid、表空间oid、所属的分区oid和二级分区规则等;

信息加载模块工作程序:

(1)二级分区信息结构体SubpartitionMap的设置:

a.在保存分区信息的结构体PartitionMap中,新增一个SubpartitionMap字段,用于保存每个分区下对应的所有二级分区信息;

b.结构体PartitionMap中每个一级分区规则信息PartElement对应一个二级分区信息结构体SubpartitionMap;

(2)先按照原有流程,加载二级分区表的所有一级分区信息,其中信息都保存在分区信息的结构体PartitionMap中;

(3)加载完一级分区信息后,根据一级分区规则对PartElement进行排序,然后按PartElement顺序加载每个一级分区对应的所有二级分区信息,包括:

a.根据一级分区的oid,从系统表pg_partition中查询到该分区下所有二级分区的记录,从记录中获取二级分区的基本信息和规则信息;

b.获取二级分区类型和二级分区的个数,保存到二级分区信息结构体SubpartitionMap中;

c.获取二级分区键信息,将其转换为内存存储结构后保存到二级分区信息结构体SubpartitionMap中;

d.逐个获取二级分区的规则信息,处理后转换为内存存储结构,保存到SubpartitionMap->PartElement中;

e.根据二级分区规则,对SubpartitionMap->PartElement进行排序;

f.继续处理下一个一级分区的二级分区信息;

(4)把所有一级分区的二级分区信息结构体SubpartitionMap都保存到PartitionMap中;

数据获取和处理模块工作程序:

(1)加载二级分区表的相关信息,其中包括分区信息;

(2)获取目标二级分区:

a.先根据目标数据或条件,从二级分区表的分区信息结构体PartitionMap中查找到匹配的目标分区的信息;

b.根据目标分区信息,获取到对应分区的所有二级分区信息结构体SubpartitionMap;

c.再从上述二级分区信息结构体SubpartitionMap中查找到目标二级分区,并获取目标二级分区信息;

(3)通过二级分区表信息和目标二级分区信息,得到二级分区的完整表信息;

(4)根据二级分区的完整表信息,处理二级分区上的数据。

综上,利用本发明方法可在openGauss平台下构建二级分区表,与一级分区表相比,二级分区表可在两个维度上使用不同的分区组合方式对数据进行分区,应用起来更加方便灵活,在实际操作过程中可以根据数据特性或业务需求把“相似”的表数据划分到更小的二级分区中,使数据划分更加精细和准确,同时,当单分区下的数据量减少时,分区索引等多种功能的维护成本会相应降低,而处理该分区下数据的效率也会显著提高,从而很好的克服了openGauss系统一级分区表划分维度简单,对于包含多层次、大量数据的单张表存在的维护成本高、处理效率低的缺陷。

附图说明

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

图1为本发明openGauss平台下二级分区表实现的总流程示意图;

图2为本发明openGauss平台下创建二级分区表的关键步骤流程图;

图3为本发明openGauss平台下二级分区表的分区信息存储结构示意图;

图4为本发明openGauss平台下二级分区表的二级分区信息加载流程图;

图5为本发明openGauss平台下二级分区表处理二级分区数据的流程图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合具体实施例及相应的附图对本发明的技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例,本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。

同时,应理解,本发明的保护范围并不局限于下述特定的具体实施方案;还应当理解,本发明实施例中使用的术语是为了描述特定的具体实施方案,而不是为了限制本发明的保护范围。

实施例1:一种openGauss平台下二级分区表的构建方法(参见图1-5),本方法是在openGauss一级分区表的基础上,实现二级分区,具体包括以下步骤:

步骤一:扩展存储分区信息的系统表pg_partition的表结构,从建表语句中获取到二级分区的相关信息,将获取到的二级分区相关信息存储到系统表pg_partition中,同时在系统表pg_partition中存储二级分区的数据字典,表数据实际存储在二级分区中;包括:

(1)扩展系统表pg_partition的表结构,在系统表pg_partition中新增4个字段以存储二级分区相关信息,所述4个字段分别用于保存二级分区类型、二级分区键、二级分区模板和二级分区所属的一级分区信息。

(2)根据二级分区表的语法规则,解析得到语法树,并从语法树中获取到二级分区相关信息,所述二级分区相关信息包括二级分区名、二级分区类型、二级分区键、二级分区规则信息和二级分区模板等。

(3)对获取到的二级分区相关信息进行合法性校验,包括:

a.二级分区类型是否支持;

b.二级分区键类型是否支持;

c.各二级分区之间的规则是否正确,二级分区名是否重复;

d.校验二级分区模板中的二级分区规则是否正确。

(4)存储二级分区信息

a.将相关的二级分区信息由内存存储结构转换为表记录存储结构,以便最终将其保存到系统表pg_partition中;

b.在系统表pg_partition中存储一条记录用于保存分区表的基础信息,除了一级分区相关信息外,还包括二级分区类型、二级分区键和二级分区模板;

c.针对每一个二级分区在系统表pg_partition中都相应地插入一条记录以保存该二级分区的关键信息,所述关键信息包括二级分区名、二级分区类型、物理文件oid、表空间oid、所属的分区oid和二级分区规则等。

步骤二:从系统表pg_partition中加载二级分区表的所有分区信息;包括:

(1)二级分区信息结构体SubpartitionMap的设置:

a.在保存分区信息的结构体PartitionMap中,新增一个SubpartitionMap字段,用于保存每个分区下对应的所有二级分区信息;

b.结构体PartitionMap中每个一级分区规则信息PartElement对应一个二级分区信息结构体SubpartitionMap。

(2)先按照原有流程,加载二级分区表的所有一级分区信息,其中信息都保存在分区信息的结构体PartitionMap中。

(3)加载完一级分区信息后,根据一级分区规则对PartElement进行排序,然后按PartElement顺序加载每个一级分区对应的所有二级分区信息,包括:

a.根据一级分区的oid,从系统表pg_partition中查询到该分区下所有二级分区的记录,从记录中获取二级分区的基本信息和规则信息;

b.获取二级分区类型和二级分区的个数,保存到二级分区信息结构体SubpartitionMap中;

c.获取二级分区键信息,将其转换为内存存储结构后保存到二级分区信息结构体SubpartitionMap中;

d.逐个获取二级分区的规则信息,处理后转换为内存存储结构,保存到SubpartitionMap->PartElement中;

e.根据二级分区规则,对SubpartitionMap->PartElement进行排序;

f.继续处理下一个一级分区的二级分区信息。

(4)把所有一级分区的二级分区信息结构体SubpartitionMap都保存到PartitionMap中。

步骤三:当查询或处理二级分区表的数据时,先根据数据或查询条件获取对应的一级分区,再获取该一级分区下对应的二级分区信息,最后根据二级分区的信息对数据进行读写操作;包括:

(1)加载二级分区表的相关信息,其中包括分区信息。

(2)获取目标二级分区:

a.先根据目标数据或条件,从二级分区表的分区信息结构体PartitionMap中查找到匹配的目标分区的信息;

b.根据目标分区信息,获取到对应分区的所有二级分区信息结构体SubpartitionMap;

c.再从上述二级分区信息结构体SubpartitionMap中查找到目标二级分区,并获取目标二级分区信息。

(3)通过二级分区表信息和目标二级分区信息,得到二级分区的完整表信息。

(4)根据二级分区的完整表信息,处理二级分区上的数据。

实施例2:一种openGauss平台下二级分区表的构建系统,所述构建系统包含:

系统表pg_partition扩展模块,其功能为扩展存储分区信息的系统表pg_partition的表结构,从建表语句中获取到二级分区的相关信息,将获取到的二级分区相关信息存储到系统表pg_partition中,同时在系统表pg_partition中存储二级分区的数据字典,表数据实际存储在二级分区中;工作程序如下:

(1)扩展系统表pg_partition的表结构,在系统表pg_partition中新增4个字段以存储二级分区相关信息,所述4个字段分别用于保存二级分区类型、二级分区键、二级分区模板和二级分区所属的一级分区信息。

(2)根据二级分区表的语法规则,解析得到语法树,并从语法树中获取到二级分区相关信息,所述二级分区相关信息包括二级分区名、二级分区类型、二级分区键、二级分区规则信息和二级分区模板等。

(3)对获取到的二级分区相关信息进行合法性校验,包括:

a.二级分区类型是否支持;

b.二级分区键类型是否支持;

c.各二级分区之间的规则是否正确,二级分区名是否重复;

d.校验二级分区模板中的二级分区规则是否正确。

(4)存储二级分区信息

a.将相关的二级分区信息由内存存储结构转换为表记录存储结构,以便最终将其保存到系统表pg_partition中;

b.在系统表pg_partition中存储一条记录用于保存分区表的基础信息,除了一级分区相关信息外,还包括二级分区类型、二级分区键和二级分区模板;

c.针对每一个二级分区在系统表pg_partition中都相应地插入一条记录以保存该二级分区的关键信息,所述关键信息包括二级分区名、二级分区类型、物理文件oid、表空间oid、所属的分区oid和二级分区规则等。

信息加载模块,其功能为从系统表pg_partition中加载二级分区表的所有分区信息;工作程序如下:

(1)二级分区信息结构体SubpartitionMap的设置:

a.在保存分区信息的结构体PartitionMap中,新增一个SubpartitionMap字段,用于保存每个分区下对应的所有二级分区信息;

b.结构体PartitionMap中每个一级分区规则信息PartElement对应一个二级分区信息结构体SubpartitionMap。

(2)先按照原有流程,加载二级分区表的所有一级分区信息,其中信息都保存在分区信息的结构体PartitionMap中。

(3)加载完一级分区信息后,根据一级分区规则对PartElement进行排序,然后按PartElement顺序加载每个一级分区对应的所有二级分区信息,包括:

a.根据一级分区的oid,从系统表pg_partition中查询到该分区下所有二级分区的记录,从记录中获取二级分区的基本信息和规则信息;

b.获取二级分区类型和二级分区的个数,保存到二级分区信息结构体SubpartitionMap中;

c.获取二级分区键信息,将其转换为内存存储结构后保存到二级分区信息结构体SubpartitionMap中;

d.逐个获取二级分区的规则信息,处理后转换为内存存储结构,保存到SubpartitionMap->PartElement中;

e.根据二级分区规则,对SubpartitionMap->PartElement进行排序;

f.继续处理下一个一级分区的二级分区信息。

(4)把所有一级分区的二级分区信息结构体SubpartitionMap都保存到PartitionMap中。

数据获取和处理模块,其功能为当查询或处理二级分区表的数据时,先根据数据或查询条件获取对应的一级分区,再获取该一级分区下对应的二级分区信息,最后根据二级分区的信息对数据进行读写操作;工作程序如下:

(1)加载二级分区表的相关信息,其中包括分区信息。

(2)获取目标二级分区:

a.先根据目标数据或条件,从二级分区表的分区信息结构体PartitionMap中查找到匹配的目标分区的信息;

b.根据目标分区信息,获取到对应分区的所有二级分区信息结构体SubpartitionMap;

c.再从上述二级分区信息结构体SubpartitionMap中查找到目标二级分区,并获取目标二级分区信息。

(3)通过二级分区表信息和目标二级分区信息,得到二级分区的完整表信息。

(4)根据二级分区的完整表信息,处理二级分区上的数据。

实施例3:一种用于在openGauss平台下构建二级分区表的电子装置(电子设备),所述电子装置包括处理器和存储器,所述存储器用于存储程序,所述处理器用于运行程序,以实现实施例1所述的openGauss平台下二级分区表的构建方法。

本发明中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。

以上所述仅为本发明的实施例而已,并不用于限制本发明。对于本领域技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原理之内所作的任何修改、替换、改进等,均应包含在本发明的权利要求保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号