数据库管理-第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技术领域,眼动追踪作为一项关键技术,对于提升用户体验、优化渲染效率具有重要意义。然而,传统的眼动追踪方案多依赖于高成本的摄像头,这不仅增加了设备的制造…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
边缘计算网关提升水产养殖尾水处理的远程运维效率
一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...
2025-05-08-deepseek本地化部署
title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek:小白也能轻松搞定! 如何给本地部署的 DeepSeek 投喂数据,让他更懂你 [实验目的]:理解系统架构与原…...
