数据库管理-第247期 23ai:全球分布式数据库-Schema对象(20241004)
数据库管理247期 2024-10-04
- 数据库管理-第247期 23ai:全球分布式数据库-Schema对象(20241004)
- 1 分区、表空间和Chunk(块)
- 2 表空间组
- 3 分片表
- 4 分片表族
- 5 复制表
- 6 在所有分片上创建的非表对象
- 总结
数据库管理-第247期 23ai:全球分布式数据库-Schema对象(20241004)
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database(Oracle与MySQL)
PostgreSQL ACE Partner
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、年度墨力之星,ITPUB认证专家、专家百人团成员,OCM讲师,PolarDB开源社区技术顾问,HaloDB外聘技术顾问,OceanBase观察团成员,青学会MOP技术社区(青年数据库学习互助会)技术顾问
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭

前面起的坑,现在继续挖。
为了充分利用Oracle全球分布式数据库中的好处,分片数据库的schema的设计应该最大限度的将数据库请求在单个分片上执行。
1 分区、表空间和Chunk(块)
通过在不同分片上的表空间中创建分区,实现了分片之间的分区分布。分片表的每个分区都存储在单独的表空间中,使表空间成为分片数据库中的数据分布单元。
如Sharded Table Family(分片表族)中所述,为了尽量减少多分片join的数量,表族中所有表的相应关联分区数据应当始终存储在同一分片中。当表族中的表在同一组分布式表空间中创建时,这是有保证的,如语法示例所示,其中表空间集ts1用于所有表。
但是,可以从不同表空间集中的表族创建不同的表,例如表空间集ts1中的Customers表和表空间集ts2中的Orders表。在这种情况下,必须保证存储Customers分区1的表空间始终与存储Orders分区1的表格空间位于同一分片中。
为了支持此功能,会形成一组来自表族中所有表的相应分区,称为块(Chunk)。块包含表族中每个表的单个分区。这保证了来自不同分片表的相关数据可以一起移动。换句话说,块是分片之间数据迁移的单位。在系统管理和复合分片中,创建分片数据库时指定每个分片内的块数。在用户定义的分片中,块的总数等于分区的数量。
下图显示了一个块,其中包含Cutomers-Orders-LineItems模式表中的相应分区。


除了分片表外,分片还可以包含单个或多个重复的表。重复的表不能存储在用于分片表的表空间中。
2 表空间组
Oracle全球分布式数据库将多个表空间作为一个称为TABLESPACE SET(表空间组)的单元进行创建和管理。
系统管理和复合分片使用表空间组,而用户定义的分片使用常规表空间。表空间是分片数据库中数据分布的逻辑单元。
PARTITIONS AUTO子句指定应自动确定分区的数量。这种类型的哈希在分片之间迁移数据时提供了更大的灵活性和效率,这对弹性可扩展性非常重要。每个表空间集创建的表空间数量取决于部署期间为共享空间定义的块的数量。
3 分片表
数据库表被拆分在分片之间,这样每个分片都包含具有相同列但行子集不同的表。以这种方式分割的表称为分片表。
下图显示了左侧一个数据库中显示的一组大型表(称为表族)如何在右侧显示的三个分片上水平分区,以便每个分片包含数据的一个子集,用红色、黄色和蓝色行表示。

分区基于分片键(Sharing key)在表空间级别跨分片分布。密钥的示例包括客户ID、帐号和国家ID。分片键支持以下数据类型:
- NUMBER
- INTEGER
- SMALLINT
- RAW
- (N)VARCHAR
- (N)VARCHAR2
- (N)CHAR
- DATE
- TIMESTAMP
分片表的每个分区都位于一个单独的表空间中,每个表空间都与一个特定的分片相关联。根据分片方法,可以自动建立关联或由管理员定义关联。
即使分片表的分区位于多个分片中,对于应用程序来说,该表的外观和行为与单个数据库中的分区表完全相同。应用程序发出的SQL语句永远不必引用分片,也不必依赖于分片的数量及其配置。
熟悉的表分区SQL语法指定了如何在分片之间分区行。例如,以下SQL语句创建了一个分片表,根据分片键cust_id在分片之间水平划分表。
CREATE SHARDED TABLE customers
( cust_id NUMBER NOT NULL
, name VARCHAR2(50)
, address VARCHAR2(250)
, region VARCHAR2(20)
, class VARCHAR2(3)
, signup DATE
,CONSTRAINT cust_pk PRIMARY KEY(cust_id)
)
PARTITION BY CONSISTENT HASH (cust_id)
PARTITIONS AUTO
TABLESPACE SET ts1
;
上面示例分片表由一致哈希进行分区,这是一种特殊类型的哈希分区,通常用于可扩展的分布式系统。此技术自动将表空间分散到分片上,以提供数据和工作负载的均匀分布。
4 分片表族
分片表族是一组以相同方式分片的表。通常,数据库表之间存在父子关系,子表(外键)中的引用约束引用父表的主键。
通过这种关系链接的多个表通常形成树状结构,其中每个子表都有一个父表。一组这样的表称为表族。表族中没有父表的表称为根表。一个表族中只能有一个根表。
这里用客户-订单-行项目模式说明了表族的分割。在分片之前,模式中的表可能如下面的示例所示。这三个表具有父子关系,其中Customers是根表。下面是分片前的表数据:
Customers Table (Root)
CustNo Name Address Location Class
--------- ---------- -------------- --------- ------
123 Brown 100 Main St us3 Gold
456 Jones 300 Pine Ave us1 Silver
999 Smith 453 Cherry St us2 Bronze
Orders Table
OrderNo CustNo OrderDate
--------- -------- -----------
4001 123 14-FEB-2013
4002 456 09-MAR-2013
4003 456 05-APR-2013
4004 123 27-MAY-2013
4005 999 01-SEP-2013
LineItems Table
LineNo OrderNo CustNo StockNo Quantity
------ ------- ------ ------- --------
40011 4001 123 05683022 1
40012 4001 123 45423609 4
40013 4001 123 68584904 1
40021 4002 456 05683022 1
40022 4002 456 45423509 3
40022 4003 456 80345330 16
40041 4004 123 45423509 1
40042 4004 123 68584904 2
40051 4005 999 80345330 12
这些表可以通过Customers表中的客户编号CustNo进行分片,该客户编号是根。包含与客户123相关的数据的分片如以下示例表所示:
Customers Table (Root)
CustNo Name Address Location Class
--------- ---------- -------------- ---------- ------
123 Brown 100 Main St us3 Gold
Orders Table
OrderNo CustNo OrderDate
--------- -------- -----------
4001 123 14-FEB-2013
4004 123 27-MAY-2013
LineItems Table
LineNo OrderNo CustNo StockNo Quantity
------ ------- ------ ------- --------
40011 4001 123 05683022 1
40012 4001 123 45423609 4
40013 4001 123 68584904 1
40041 4004 123 45423509 1
40042 4004 123 68584904 2
这些客户123的相关数据就会被分配到一个分片内,可以避免关联数据的跨分片查询。
5 复制表
在Oracle全球分布式数据库中,每个分片中内容相同的表称为复制表。
分片数据库既包括跨分片水平分区的分片表,也包括复制到所有分片的复制表。对于不经常更新且经常与分片表一起访问的相对较小的表,复制表是一个不错的选择。因此,复制表通常包含引用信息,例如,每个分片共用的Stock Items表。
对于许多应用程序,通过在所有分片上复制只读或只读表,可以最大限度地增加单个分片处理的数据库请求数量。分片表和复制表的组合使得与分片键相关的所有事务都可以由单个分片处理。该技术实现了线性可扩展性和故障隔离。
作为需要复制表的示例,请考虑“分片表族”中描述的表族。此数据库模式还可能包括一个Products表,该表包含为此表系列创建的分片中所有客户共享的数据,并且不能按客户编号进行分片。为了防止订单处理过程中的多分片查询,可以在分片数据库中的所有分片上复制整个表。
分片表(Customers、Orders、Line Items)和重复表(Products)之间的区别如下图所示。

在上图中,Customers、Orders、Line Items都由客户ID号分为三个分片,如图顶部每个表中行的颜色和每个分片中分片表的相应颜色所示。以灰色显示的复制表Products被完整地复制到所有分片,如表中指向三个分片的箭头所示。
6 在所有分片上创建的非表对象
在Oracle全球分布式数据库中,除表以外,还有其他的schema对象,如用户、角色、视图、索引、同义词、函数过程和包,以及一些非schema对象,如表空间、表空间组、目录和上下文。这些对象可以在所有分片上创建。
与表不同,表在CREATE语句中需要一个额外的关键字——SHARDED或DUPLICATED——其他对象是使用现有语法在所有分片上创建的。唯一的要求是必须启用SHARD DDL会话属性。
请注意,当前版本不支持在以下对象的所有分片上自动创建。这些对象可以通过连接到单个分片来创建:
- Cluster
- Control file
- Database link
- Disk group
- Edition
- Flashback archive
- Materialized zone map
- Outline
- Pfile
- Profile
- Restore point
- Rollback segment
- Summary
从18c开始,支持物化视图和视图日志,但有以下限制:
- 在分片表上创建的物化视图在目录数据库中保持为空,而分片上的相应物化视图包含来自每个单独分片的数据。
- 对于分片表上的物化视图,仅支持REFRESH COMPLETE ON DEMAND USING TRUSTED CONSTRAINTS选项。
总结
本期简单介绍了23ai:全球分布式数据库-Schema对象相关内容。
老规矩,知道写了些啥。
相关文章:
数据库管理-第247期 23ai:全球分布式数据库-Schema对象(20241004)
数据库管理247期 2024-10-04 数据库管理-第247期 23ai:全球分布式数据库-Schema对象(20241004)1 分区、表空间和Chunk(块)2 表空间组3 分片表4 分片表族5 复制表6 在所有分片上创建的非表对象总结 数据库管理-第247期 …...
Docker搭建一款开源的文档管理系统
1.系统介绍 Wizard是一款开源的文档管理系统,它支持多种格式类型的文档管理,包括Markdown、Swagger和Table,以适应不同场景和需求下的文档管理需求。 1.1功能特点 开源免费:Wizard是一款完全免费的开源项目,用户可以…...
软件验证与确认实验一:静态分析
目录 1. 实验目的及要求.................................................................................................... 3 2. 实验软硬件环境.................................................................................................... 3 …...
基于SpringBoot+Vue的高校运动会管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
什么东西可以当做GC Root,跨代引用如何处理?
引言 在Java的垃圾回收机制中,GC Root(Garbage Collection Root,垃圾回收根)是垃圾回收器判断哪些对象是可达的,哪些对象可以被回收的起点。GC Root通过遍历对象图,标记所有可达的对象,而那些不…...
Python深度学习:从神经网络到循环神经网络
Python深度学习:从神经网络到循环神经网络 目录 ✨ 神经网络基础 1.1 🔍 前向传播与反向传播🎨 卷积神经网络(CNN) 2.1 🖼️ 图像分类任务的实现 2.2 🚀 常用架构(LeNet、VGG、Res…...
C++输⼊输出
1.<iostream> 是 Input Output Stream 的缩写,是标准的输⼊、输出流库,定义了标准的输⼊、输 出对象 2.std::cin 是 istream 类的对象,它主要⾯向窄字符(narrow characters (of type char))的标准输 ⼊流。 3…...
卡码网KamaCoder 117. 软件构建
题目来源:117. 软件构建 C题解(来源代码随想录):拓扑排序:给出一个 有向图,把这个有向图转成线性的排序。拓扑排序也是图论中判断有向无环图的常用方法。 拓扑排序的过程,其实就两步࿱…...
Acwing 线性DP
状态转移方程呈现出一种线性的递推形式的DP,我们将其称为线性DP。 Acwing 898.数字三角形 实现思路: 对这个三角形的数字进行编号,状态表示依然可以用二维表示,即f(i,j),i表示横坐标(横线),j表…...
Docker面试-24年
1、Docker 是什么? Docker一个开源的应用容器引擎,是实现容器技术的一种工具,让开发者可以打包他们的应用以及环境到一个镜像中,可以快速的发布到任何流行的操作系统上。 2、Docker的三大核心是什么? 镜像:Docker的…...
ubuntu 安装k8s
#关闭 Swap 内存,配置完成建议重启一下 nano /etc/fstab #注释下面相似的一行 #/swapfile none swap sw 0 0 #重启 reboot#部属k8s apt update && apt install -y apt-transport-https 下载 gpg 密钥 curl https://mi…...
No.4 笔记 | 探索网络安全:揭开Web世界的隐秘防线
在这个数字时代,网络安全无处不在。了解Web安全的基本知识,不仅能保护我们自己,也能帮助我们在技术上更进一步。让我们一起深入探索Web安全的世界,掌握那些必备的安全知识! 1. 客户端与WEB应用安全 前端漏洞࿱…...
spring揭秘24-springmvc02-5个重要组件
文章目录 【README】【1】HanderMapping-处理器映射容器【1.1】HanderMapping实现类【1.1.1】SimpleUrlHandlerMapping 【2】Controller(二级控制器)【2.1】AbstractController抽象控制器(控制器基类) 【3】ModelAndView(模型与视…...
关键字:register
1.铺垫 1.1 计算集中具有存储能力的硬件:cpu中的寄存器、cache,内存,硬盘等 1.2离cpu越近的存储硬件,效率越高,单价成本越贵;离cpu越远的存储硬件,效率越低,单价成本越便宜&#x…...
力扣 简单 110.平衡二叉树
文章目录 题目介绍解法 题目介绍 解法 平衡二叉树:任意节点的左子树和右子树的高度之差的绝对值不超过 1 //利用递归方法自顶向下判断以每个节点为根节点的左右子树的最大深度是否大于1 class Solution {public boolean isBalanced(TreeNode root) {if(root null){return tr…...
基于深度学习的代码优化
基于深度学习的代码优化是一种使用深度学习技术来提升编程代码性能、减少运行时间或资源消耗的方式。通过模型学习大量代码的特征和结构,深度学习可以帮助自动化地识别和应用优化策略。以下是一些关键应用领域: 编译器优化:深度学习模型可以用…...
汽车电气系统中KL30、KL15、KL50、KLR、KL31、KL87、KL75的作用
目录 1、KL30 (Battery Positive Terminal) 2、KL15 (Ignition Switch, Positive) 3、KL50 (Starter Motor Terminal) 4、KLR (Ignition-Off Draw) 5、KL31 (Ground) 6、KL87 (Relay Output) 7、KL75 (Accessory) 在汽车电气系统中,KL系列的术语起源于德国&a…...
随笔(四)——代码优化
文章目录 前言1.原本代码2.新增逻辑3.优化逻辑 前言 原逻辑:后端data数据中返回数组,数组中有两个对象,一个是属性指标,一个是应用指标,根据这两个指标展示不同的多选框 1.原本代码 getIndicatorRange(indexReportLi…...
安装管理K8S的开源项目KubeClipper介绍
安装管理K8S的开源项目KubeClipper介绍 1. 概述 KubeClipper是九州云开源的一个图形化界面 Kubernetes 多集群管理工具,旨在提供易使用、易运维、极轻量、生产级的 Kubernetes 多集群全生命周期管理服务。让运维工程师从繁复的配置和晦涩的命令行中解放出来&#…...
北交大研究突破:塑料光纤赋能低成本无摄像头AR/VR眼动追踪技术
北交大研究:探索无摄像头低成本AR/VR眼动追踪新路径 在AR/VR技术领域,眼动追踪作为一项关键技术,对于提升用户体验、优化渲染效率具有重要意义。然而,传统的眼动追踪方案多依赖于高成本的摄像头,这不仅增加了设备的制造…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
