达梦数据库分区表介绍

概述

本文将对达梦数据库分区表概念、创建、维护进行介绍。

1.分区表概念

1.1 分区表使用场景

近几年,随着移动支付快速发展,银行交易系统中【移动小微支付场景】使用越来越多,系统中流水账单表数据量巨大,往往上TB。

为了提高流水账单表查询等操作响应,该表设计可以采用分区表。反应到实际生活场景中,日常我们使用手机移动银行APP查个人账单,查询菜单里有按年、按月、按季度查询,流水账单表可以使用分区表进行多级分区,例如,季度、月、周。

总结:采用分区表有两个显示的收益:

对表读写响应更快

方便历史数据快速归档

1.2 DM分区表概念

达梦数据库对分区表设计有深度的思考,可以更好的支持业务发展。下面DM分区表概念:

分区是指将表、索引等数据库对象划分为较小的可管理片段的技术,每一个片段称为分区子表或分区索引。一个表被分区后,对表的查询操作可以局限于某个分区进行,而不是整个表,这样可以大大提高查询速度。

1.3 DM 分区方式

达梦数据库 DM 支持对表进行水平分区。对于水平分区,提供以下分区方式:

  • 范围(range)水平分区:对表中的某些列上值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上;
  • 哈希(hash)水平分区:通过指定分区编号来均匀分布数据的一种分区类型,通过在 I/O 设备上进行散列分区,使得这些分区大小基本一致;
  • 列表(list)水平分区:通过指定表中的某个列的离散值集,来确定应当存储在一起的数据。例如,可以对表上的 status 列的值在('A','H','O')放在一个分区,值在('B','I','P')放在另一个分区,以此类推;
  • 多级分区表:按上述三种分区方法进行任意组合,将表进行多次分区,称为多级分区表。

1.4 分区表优点

  1. 减少所有数据都损坏的可能性,一个表空间损坏不影响其他表空间,提高可用性;
  2. 恢复时间大大减少;
  3. 可以将同一个表中的数据分布在不同的磁盘上,从而均衡磁盘上的 I/O 操作;
  4. 提高了表的可管理性、可利用性和访问效率。

2.创建分区表

2.1创建范围分区表

范围分区非常适用于数据按时间范围组织的表,不同的时间段的数据属于不同的分区。

范围分区是按照某个列或几个列的值的范围来创建分区,当用户向表中写入数据时,数据库服务器将按照这些列上的值进行判断,将数据写入相应的分区中。

在创建范围分区时,首先要指定分区列,即按照哪些列进行分区,然后为每个分区指定数据范围。范围分区支持 MAXVALUE 范围值的使用,MAXVALUE 相当于一个比任何值都大的值。

举例,创建一个范围分区表callinfo,用来记录用户的2022年的电话通讯信息,包括主叫号码、被叫号码、通话时间和时长,并且根据季度进行分区。

    CREATE  TABLE  callinfo( caller 	CHAR(15), callee 	CHAR(15),time		DATETIME,duration	INT)PARTITION BY RANGE(time)(PARTITION p1 VALUES LESS THAN ('2022-04-01'),PARTITION p2 VALUES LESS THAN ('2022-07-01'),PARTITION p3 VALUES LESS THAN ('2022-10-01'),PARTITION p4 VALUES EQU OR LESS THAN ('2022-12-31')  );

通过DM 管理工具查看该表已经创建成功:

 

2.2创建LIST分区表

一般来说,对于数字型或者日期型的数据,适合采用范围分区的方法;而对于字符型数据,取值比较固定的,则适合于采用 LIST 分区的方法。

举例,创建一个产品销售记录表sales,记录产品的销量情况。由于产品只在几个固定的城市销售,所以可以按照销售城市对该表进行分区。

create table sales(sales_id	INT,saleman	CHAR(20),saledate	DATETIME,city		CHAR(10)
)PARTITION BY LIST(city)(PARTITION p1 VALUES ('北京', '天津'),PARTITION p2 VALUES ('上海', '南京', '杭州'),PARTITION p3 VALUES ('武汉', '长沙'),PARTITION p4 VALUES ('石家庄', '济南')
);

注意的是,LIST 分区的分区键必须唯一。

通过DM 管理工具查看该表已经创建成功:

 

2.3创建哈希分区表

DM哈希分区提供了一种在指定数量的分区中均等地划分数据的方法,基于分区键的散列值将行映射到分区中。当用户向表中写入数据时,数据库服务器将根据一个哈希函数对数据进行计算,把数据均匀地分布在各个分区中。

举例,创建销售表sales01:

    CREATE  TABLE  sales01( sales_id	INT,saleman	CHAR(20),saledate	DATETIME,city		CHAR(10))PARTITION BY HASH(city)(PARTITION p1,PARTITION p2,PARTITION p3,PARTITION p4);

通过DM 管理工具查看该表已经创建成功:

2.4创建多级分区表 

在很多情况下,经过一次分区并不能精确地对数据进分类,这时需要多级分区表。

举例,创建一个产品销售记录表 sales02,记录产品的销量情况。由于产品需要按地点和销售时间进行统计,则可以对该表进行 LIST-RANGE 分区。

    CREATE  TABLE  SALES02( SALES_ID	 INT,SALEMAN	CHAR(20),SALEDATE	DATETIME,CITY		  CHAR(10))PARTITION BY LIST(CITY)SUBPARTITION BY RANGE(SALEDATE) SUBPARTITION TEMPLATE(SUBPARTITION P11 VALUES LESS THAN ('2012-04-01'),SUBPARTITION P12 VALUES LESS THAN ('2012-07-01'),SUBPARTITION P13 VALUES LESS THAN ('2012-10-01'),SUBPARTITION P14 VALUES EQU OR LESS THAN (MAXVALUE))(PARTITION P1 VALUES ('北京', '天津')(SUBPARTITION P11_1 VALUES LESS THAN ('2012-10-01'),SUBPARTITION P11_2 VALUES EQU OR LESS THAN (MAXVALUE)),PARTITION P2 VALUES ('上海', '南京', '杭州'),PARTITION P3 VALUES (DEFAULT));

通过DM 管理工具查看该表已经创建成功:

3.维护分区表

3.1增加分区

DM支持用ALTER TABLE ADD PARTITION语句将新分区增加到最后一个现存分区的后面。

举例,范围分区表callinfo现需要记录用户的2023年的第一季度的通讯信息,那么,需要为2023年第一季度增加一个分区:

 

ALTER TABLE callinfo  ADD PARTITION p5 VALUES LESS THAN ('2023-4-1');

通过DM 管理工具查看p5分区已经添加:

对于范围分区,增加分区必须在最后一个分区范围值的后面添加,要想在表的开始范围或中间增加分区,应使用 SPLIT PARTITION 语句。

对于LIST分区,增加分区包含的离散值不能已存在于某个分区中。

例为LIST分区表sales添加一个分区管理沈阳和长春的销售情况:

ALTER TABLE sales   ADD PARTITION p5 VALUES ('沈阳', '长春');

 通过DM 管理工具查看该表已经新增了P5分区:

 只能对范围分区和 LIST 分区增加分区,不能对哈希分区增加分区。

3.2删除分区

DM支持用ALTER TABLE DROP PARTITION语句将分区删除。

范围分区表callinfo现需要删除记录用户的2022年的第一季度的通讯信息,那么,只需删除 callinfo 的分区p1即可。

ALTER TABLE callinfo DROP PARTITION p1;

通过DM 管理工具查看该表p1分区已经删除:

 

3.3交换分区

假设上文提到的 callinfo 表是用于维护最近12个月的用户通话信息,超过12个月的订单需要迁移到该季度的通话信息历史表中,并且每一个季度都有一个相应的历史表。如果没有使用水平分区,需要较多的删除和插入操作,并产生大量的redo和undo日志。

如果使用分区表,如上文提到的 callinfo,只需使用交换分区即可完成以上功能。

创建表 callinfo_2022Q2:

CREATE  TABLE  callinfo_2022Q2( 
caller 	CHAR(15), 
callee 	CHAR(15),
time		DATETIME,
duration	INT
);

交换分区:

ALTER TABLE callinfo EXCHANGE PARTITION p2 WITH TABLE callinfo_2022Q2;

删除原分区:

ALTER TABLE callinfo DROP PARTITION p2;

新增分区,记录 2023 年第二季度通话记录:

ALTER TABLE callinfo  ADD PARTITION p6 VALUES LESS THAN ('2023-7-1');

通过DM 管理工具查看callinfo表p2分区已经删除,p6分区已经添加。

通过交换分区实现分区p2和新建表callinfo_2022Q2的数据交换,表callinfo_2022Q2将得到2022年第二季度的通话记录,而分区p2数据将被清空。交换分区采用数据字典信息交换的技术,几乎不涉及IO操作,因此效率非常高。

仅范围分区和 LIST 分区支持交换分区,哈希分区表不支持。

3.4合并分区

举例,可将callinfo 的 2022第3季度和第4季度合并成一个分区:

ALTER TABLE callinfo MERGE PARTITIONS p3, p4 into partition p3_4;

 通过DM 管理工具查看callinfo表p3和p4分区已经合并为p3_4分区:

3.5拆分分区

ALTER TABLE语句的SPLIT PARTITION子句被用于将一分区中的内容重新划分成两个新的分区。当一个分区变得太大以至于要用很长时间才能完成备份、恢复或维护操作时,就应考虑做分割分区的工作,还可以用SPLIT PARTITION子句来重新划分I/O负载。

举例,将合并后的p3_4拆分为原两分区 p3和p4,分别记录2022年第三和第四季度的通话记录:

 

ALTER TABLE callinfo SPLIT PARTITION p3_4 AT ('2022-9-30') INTO (PARTITION p3, PARTITION p4);

通过DM 管理工具查看callinfo表p3_4分区已经拆分为p3和p4分区:

总结

首先,本文通过在日常生活通过手机银行APP中查看流水账单表场景引入分区表,介绍了达梦数据库分区表概念、分区方式、及分区表优点;
其次,本文介绍了创建范围、LIST、哈希、多级分区表示例;
最后,本文介绍了分区表增删、交换、合并、拆分分区维护。

本文主要是抛砖引玉,关于达梦数据库分区表更多介绍请登录达梦数据库官网查看。

 关于达梦数据库更多学习内容,欢迎访问达梦社区:
https://eco.dameng.com

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/84415.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker搭建私有仓库并迁移

目录 方案 A、B机器安装docker 设置阿里云镜像源 安装 Docker-CE并设置为开机自动启动 A机器准备数据 拷贝数据 B机器运行redis、mysql镜像 重启docker服务 方案 准备两台机器:A机器(可以连接外网),B机器(内网机器…

Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分离)【三】

😀前言 本篇博文是关于Spring Boot(Vue3ElementPlusAxiosMyBatisPlusSpring Boot 前后端分离)【三】的分享,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我…

MacOS goland go1.21 debug问题

安装dlv brew install dlv 安装之后在终端会显示所在目录 类似/usr/local/Cellar/delve/1.21.0/bin 配置goland 在文件系统中找到goland 右击选择show package contents -> Contents -> plugins -> go 尝试替换 其中对应系统 的 dlv 结果还是不行 然后打开应用gol…

Python|爬虫和测试|selenium框架模拟登录示例(一)

前言: 上一篇文章Python|爬虫和测试|selenium框架的安装和初步使用(一)_晚风_END的博客-CSDN博客 大概介绍了一下selenium的安装和初步使用,主要是打开某个网站的主页,基本是最基础的东西,那么,…

【NLP的python库(01/4) 】: NLTK

一、说明 NLTK是一个复杂的库。自 2009 年以来不断发展,它支持所有经典的 NLP 任务,从标记化、词干提取、词性标记,包括语义索引和依赖关系解析。它还具有一组丰富的附加功能,例如内置语料库,NLP任务的不同模型以及与S…

桃子叶片病害识别(Python代码,pyTorch框架,深度卷积网络模型,很容易替换为其它模型,带有GUI识别界面)

1.分为三类 健康的桃子叶片 ,251张 桃疮痂病一般,857张 桃疮痂病严重,770 张 2. GUI界面识别效果和predict.py识别效果如视频所示桃子叶片病害识别(Python代码,pyTorch框架,深度卷积网络模型&#xff0…

squid服务器

目录 squid初识 安装squid代理 常用命令 主要配置文件 正向代理 环境配置 linux服务器设置 windows客户端设置 反向代理 环境配置 在web服务器配置服务 linux服务器配置 squid初识 含义:squid cache是一个流行的自由软件(GNU通用公共许可证…

[C++ 网络协议] 套接字的多种可选项

目录 1. 套接字的可选项 2. 获取/设置套接字可选项 2.1 getsockopt函数(获取套接字可选项) 2.2 setsockopt函数(设置套接字可选项) 3. 常用套接字可选项 3.1 SOL_SOCKET协议层的SO_TYPE可选项 3.2 SOL_SOCKET协议层的SO_SN…

国产化-银河麒麟V10系统及docker的安装

一、最近在研究国产化操作系统,“银河麒麟V10”, 在我电脑本机vmware 15的虚拟机中进行安装测试; 1.点击这里提交产品试用申请,不过只需要随便输入,手机号验证码验证后方可跳转至下载地址产品试用申请国产操作系统、银…

【SpringBoot】第一篇:redis使用

背景&#xff1a; 本文是教初学者如何正确使用和接入redis。 一、引入依赖 <!--redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><depen…

JVM工具-1. jps:虚拟机进程状态工具

文章目录 1. jps介绍2. jps命令格式3. jps工具主要选项4. jps -q5. jps -m6. jps -l7. jps -v 1. jps介绍 jps(JVM Process Status Tool)&#xff1a;虚拟机进程状态工具&#xff0c;可以列出正在运行的虚拟机进程&#xff0c;并显示虚拟机执行主类&#xff08;Main Class&…

章节 3:React.js基础 -《React.js手把手教程:从初学者到实战高手》- 第一部分:React.js基础

《React.js手把手教程&#xff1a;从初学者到实战高手》 第一部分&#xff1a;React.js基础 章节 3&#xff1a;React.js基础 在这一章中&#xff0c;我们将进一步了解 React.js 的基础知识。我们会从最基本的 React 组件开始&#xff0c;逐步引导你进入 React.js 的世界。 …