达梦数据库分区表介绍

概述

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

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Error:Java:无效的源发行版:14

问题描述:项目拉下来,跑的时候发现版本有问题。这个问题可好解决了,只需要看下面几个方面,然后让他们保持一致就OK了 step1:查看本地的jdk版本 打开cmd窗口,输入命令 java -version就可以查看到本地的jdk版…

3.卷积层相关概念

3.1 卷积原理 ① Conv1d代表一维卷积,Conv2d代表二维卷积,Conv3d代表三维卷积。 ② kernel_size在训练过程中不断调整,定义为3就是3 * 3的卷积核,实际我们在训练神经网络过程中其实就是对kernel_size不断调整。 ③ 可以根据输入…

uniapp 布局(自定义导航栏加固定高度的主要内容)

不想让整体页面出现滚动条 页面大致分为三部分,导航栏、主题内容、tabbar,不想让整个页面出现滚动条,只想让主要内容滚动。 我这里是直接用了uni.getSystemInfoSync(),整体分为两部分,自定义头部和滚动内容&#xff…

leetcode410. 分割数组的最大值(java)

分割数组的最大值 题目描述二分法代码演示 题目描述 难度 - 困难 410. 分割数组的最大值 给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组。 设计一个算法使得这 m 个子数组各自和的最大值最小。 示例 1: 输入&…

在ubuntu上安装ns2和nam(ubuntu16.04)

在ubuntu上安装ns2和nam 版本选择安装ns2安装nam 版本选择 首先,版本的合理选择可以让我们避免很多麻烦 经过测试,ubuntu的版本选择为ubuntu16.04,ns2的版本选择为ns-2.35,nam包含于ns2 资源链接(百度网盘) 链接:https://pan.bai…

Ansible项目实战管理/了解项目环境/项目管理

一,项目环境 1.项目基础 项目过程 调研阶段 设计阶段 开发阶段 测试阶段 运营阶段 2.项目环境 个人开发环境 公司开发环境 项目测试环境 项目预发布环境 灰度环境:本身是生产环境,安装项目规划,最终所有的生产环境都发…

【Locomotor运动模块】抓取

文章目录 前言一、主要组件及其设置二、案例:右手柄抓取立方体三、“次抓取” 五种方式四、“可交互物体” 的两个属性第一部分,FollowTracking第二部分,Grab Offset 五、改变抓取点的位置 前言 参照B站VRTK4.0教程:L30 可以抓取…

2023.8.26-2023.9.3 周报【3D+GAN+Diffusion基础知识+训练测试】

目录 学习目标 学习内容 学习时间 学习产出 学习目标 1. 3D方向的基础知识 2. 图像生成的基础知识(GAN \ Diffusion) 3. 训练测试GAN和Diffusion 学习内容 1. 斯坦福cv课程-3D (网课含PPT) 2. sjtu生成模型课件 3. ge…

2023最新 Electron.js 桌面应用开发教程(基础篇)更新中

Electron是什么? Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux Electron Fiddle 运行实例 Ele…

git 提交错误,回滚到某一个版本

git log 查看版本号 commit 后面跟的就是版本号git reset --hard 版本号 (就可以回滚到你要去的版本)git push -f (因为本地回滚了,所以和远程会差几个版本。所以这时候只有强制推送,覆盖远程才可以)

前端进阶之——模块化

在做项目的时候越来越发现模块化的重要性,做好模块化开发不仅给后期的维护带来不少好处而且大大提升项目开发效率,接下来整理一下模块化相关知识吧。 模块化开发的优点 封装方法、提高代码的复用性、可维护性和可读性隔离作用域,避免污染全…

【Linux】序列化和反序列化

文章目录 定义利用 Json 实现序列化反序列化Json 的认识Jsoncpp 库的下载与认识实现序列化实现反序列化 在网络编程中,直接使用 结构体 进行数据传输会出错,因为本质上socket无法传输结构体,我们只有将结构体装换为字节数组,或者是…

Java项目-苍穹外卖-Day05-Redis技术应用

1.店铺营业状态设置 需求分析和设计 左上角要求是有回显的 所以至少两个接口 1.查询营业状态接口(分为了管理端和用户端) 2.修改营业状态接口 因为管理端和用户端路径不同,所以现在是至少三个接口的 可以发现如果存到表里除了id只有一个…

Cenos7安装小火车程序动画

一:替换安装源 #先安装一下 epel源,因为安装包在epel源中。 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo [rootwww ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo --2023-09-01 18:5…

LInux之chrony服务器

目录 场景 重要性 LInux的两个时钟 硬件时钟 系统时钟 NTP协议 Chrony介绍 定义 组成 --- chronyd和chronyc 安装与配置 安装 Chrony配置文件分析 同步时间服务器 chronyc命令 chronyc sources输出分析 其它命令 查看时间服务器的状态 查看时间服务器是否在线 …

chatGPT讲师AIGC讲师叶梓:大模型这么火,我们在使用时应该关注些什么?-5

以下为叶老师讲义分享: P20-P24 顺便看看某大模型觉得“两头蛇”长啥样? “羊驼-2”的神逻辑 欣赏一下GPT-4给出的满分答案 提示工程的模式 1、说明模式下,您为 ChatGPT 输入内容来解释或阐明一个概念或理论。 它的主要功能是定义各种概念。…

芯科科技推出专为Amazon Sidewalk优化的全新片上系统和开发工具,加速Sidewalk网络采用

芯科科技为Sidewalk开发提供专家级支持 中国,北京 - 2023年8月22日 – 致力于以安全、智能无线连接技术,建立更互联世界的全球领导厂商Silicon Labs(亦称“芯科科技”,NASDAQ:SLAB)今日在其一年一度的第四…

《Kubernetes部署篇:Ubuntu20.04基于二进制安装安装kubeadm、kubelet和kubectl》

一、背景 由于客户网络处于专网环境下, 使用kubeadm工具安装K8S集群,由于无法连通互联网,所有无法使用apt工具安装kubeadm、kubelet、kubectl,当然你也可以使用apt-get工具在一台能够连通互联网环境的服务器上下载kubeadm、kubele…

Layer 2盛夏已至,StarkNet如何实现价值跃迁?

作者|Jason Jiang Layer 2概念在2023年夏天迎来爆发。Coinbase、ConsenSys等加密巨头纷纷下场,其部署的原生L2解决方案Base、Linea在过去两个月内相继完成主网上线;被誉为L2 四大天王之一的StarkNet也在夏天顺利完成“量子跃迁”升级&#x…

卷积神经网络实现运动鞋识别 - P5

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章:Pytorch实战 | 第P5周:运动鞋识别🍖 原作者:K同学啊 | 接辅导、项目定制🚀 文章来源:K同学的学习圈子 目录…