数据库管理-第247期 23ai:全球分布式数据库-Schema对象(20241004)

news2024/11/25 16:46:31

数据库管理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。
除授权转载并标明出处外,均为“非法”抄袭

演示文稿1_01.png
前面起的坑,现在继续挖。
为了充分利用Oracle全球分布式数据库中的好处,分片数据库的schema的设计应该最大限度的将数据库请求在单个分片上执行。

1 分区、表空间和Chunk(块)

通过在不同分片上的表空间中创建分区,实现了分片之间的分区分布。分片表的每个分区都存储在单独的表空间中,使表空间成为分片数据库中的数据分布单元。
如Sharded Table Family(分片表族)中所述,为了尽量减少多分片join的数量,表族中所有表的相应关联分区数据应当始终存储在同一分片中。当表族中的表在同一组分布式表空间中创建时,这是有保证的,如语法示例所示,其中表空间集ts1用于所有表。
但是,可以从不同表空间集中的表族创建不同的表,例如表空间集ts1中的Customers表和表空间集ts2中的Orders表。在这种情况下,必须保证存储Customers分区1的表空间始终与存储Orders分区1的表格空间位于同一分片中。
为了支持此功能,会形成一组来自表族中所有表的相应分区,称为块(Chunk)。块包含表族中每个表的单个分区。这保证了来自不同分片表的相关数据可以一起移动。换句话说,块是分片之间数据迁移的单位。在系统管理和复合分片中,创建分片数据库时指定每个分片内的块数。在用户定义的分片中,块的总数等于分区的数量。
下图显示了一个块,其中包含Cutomers-Orders-LineItems模式表中的相应分区。
image.png
image.png
除了分片表外,分片还可以包含单个或多个重复的表。重复的表不能存储在用于分片表的表空间中。

2 表空间组

Oracle全球分布式数据库将多个表空间作为一个称为TABLESPACE SET(表空间组)的单元进行创建和管理。
系统管理和复合分片使用表空间组,而用户定义的分片使用常规表空间。表空间是分片数据库中数据分布的逻辑单元。
PARTITIONS AUTO子句指定应自动确定分区的数量。这种类型的哈希在分片之间迁移数据时提供了更大的灵活性和效率,这对弹性可扩展性非常重要。每个表空间集创建的表空间数量取决于部署期间为共享空间定义的块的数量。

3 分片表

数据库表被拆分在分片之间,这样每个分片都包含具有相同列但行子集不同的表。以这种方式分割的表称为分片表。
下图显示了左侧一个数据库中显示的一组大型表(称为表族)如何在右侧显示的三个分片上水平分区,以便每个分片包含数据的一个子集,用红色、黄色和蓝色行表示。
image.png
分区基于分片键(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)之间的区别如下图所示。
image.png
在上图中,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对象相关内容。
老规矩,知道写了些啥。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++——模板进阶、继承

文章目录 一、模板1. 非类型模板参数2. 模板的特化函数模板特化类模板特化1. 全特化2. 偏特化部分特化参数更进一步的限制 二、继承1. 概念2. 定义定义格式 3. 继承基类成员访问⽅式的变化4. 继承类模板5.基类和派⽣类间的转换6. 继承中的作⽤域隐藏规则: 7. 派⽣类…

LinuxO(1)调度算法

概念 在Linux中,O(1)调度算法是一种进程调度算法。O(1)表示算法的时间复杂度是常数级别的,与系统中的进程数量无关。 运行队列结构 他采用了两个运行队列,一个活动队列和一个过期队列。活动队列中的进程是有资格获取CPU时间片的进程&#x…

阳台山足球营地的停车位探寻

阳台山足球营地的环境是真好哈。停车场名称:阳台山森林公园配套停车场。应该很多爬山的人车子也停在这里。而且我没想到的,阳台山的山泉水还有不少居民每天提着空桶去山上装。看来环境是真的很好哈 停车场有地面和地下停车场,停车位个数查不…

Linux驱动开发(速记版)--设备模型

第八十章 设备模型基本框架-kobject 和 kset 80.1 什么是设备模型 设备模型使Linux内核处理复杂设备更高效。 字符设备驱动适用于简单设备,但对于电源管理和热插拔,不够灵活。 设备模型允许开发人员以高级方式描述硬件及关系,提供API处理设备…

若依使用(二次开发)

RouYi-MT RouYi-MT下载: 下载地址 RouYi-MT的使用(修改若依代码中文件夹得统一包名) 将对应的Springboot文件压缩成压缩包。 填写对应的参数,生成修改后的文件。 开发步骤 1.创建子项目到RouYi-springboot中,添加…

简单易懂的springboot整合Camunda 7工作流入门教程

简单易懂的Spring Boot整合Camunda7入门教程 因为关于Spring Boot结合Camunda7的教程在网上比较少,而且很多都写得有点乱,很多概念写得太散乱,讲解不清晰,导致看不懂,本人通过研究学习之后就写出了这篇教学文档。 介…

我的创作纪念日一年

目录 机缘 收获 日常 成就 憧憬 机缘 我之所以开始写CSDN博客,源于一段特殊的时光。去年此时,我独自待在实验室,周围的世界仿佛与我无关。没有旅游,没有与朋友的欢聚,情感的挫折和学业的压力如潮水般袭来。在这样的…

2025舜宇招聘【内推码】

【2025内推码】 DSwNQ9yu DSJXN8Mr 舜宇集团2025届全球校园招聘正式启动!!! 专业需求:机械、自动化、电子、电气、通信、控制、测控、计算机、软件、物理、光学等专业; 工作地点:宁波余姚、浙江杭州、广东…

97. UE5 GAS RPG 实现闪电链技能(二)

书接上回,如果没有查看上一篇文章的同学推荐先看上一章,我们接着实现闪电链技能。 在上一章最后,我们实现了闪电链的第一条链,能够正确显示特效,接下来,我们先实现它的音效和一些bug修复。 我们在多端网络里…

(9)MATLAB瑞利衰落信道仿真2

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、瑞利衰落信道二、瑞利衰落信道建模三、仿真结果二、高斯随机变量和瑞利随机变量后续 前言 本文首先给出瑞利衰落信道模型,并根据瑞利衰落变量估…

乌班图基础设施安装之Mysql8.0+Redis6.X安装

简介:云服务器基础设施安装之 Mysql8.0Redis6.X 安装 Docker安装 # 按照依赖 yum install -y yum-utils device-mapper-persistent data lvm2 Docker Mirror 从去年开始. hub.docker.com[1] 在国内的访问速度极慢. 当时大家主要还是依赖国内的一些镜像源: 如中科…

【JNI】数组的基本使用

在上一期讲了基本类型的基本使用,这期来说一说数组的基本使用 HelloJNI.java:实现myArray函数,把一个整型数组转换为双精度型数组 public class HelloJNI { static {System.loadLibrary("hello"); }private native String HelloW…

AI编程工具的崛起:效率提升的未来在哪里?

你正在使用的编程工具会被淘汰吗?AI编程工具正在改变这一切! 在日益忙碌的开发世界里,工具的选择决定了开发者的工作效率。在过去的十年里,从代码编辑器到版本控制工具,各种工具帮助开发者逐步优化了工作流程&#xf…

C/C++逆向:函数逆向分析-调用约定分析

在进行函数逆向分析时,分析其函数调用约定具有非常重要的作用,因为调用约定直接影响了函数的参数传递、返回值、栈管理、寄存器使用等多个方面,不同的编译器和平台可能有不同的默认调用约定,识别调用约定可以帮助判断代码是由哪种…

HTB:Mongod[WriteUP]

连接至HTB服务器并启动靶机 靶机IP:10.129.99.33 分配IP:10.10.16.12 1.How many TCP ports are open on the machine? 使用nmap对靶机进行全端口TCP脚本、服务扫描: nmap -sC -sV -T4 -p- {TARGET_IP} 可以看到靶机共开放TCP端口2个&…

LC108-将有序数组转化为二叉搜索树(二叉平衡树)

文章目录 1 题目2 思路3 ACM完整代码参考 1 题目 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡二叉搜索树 示例: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释&#xff1…

最佳语音识别 Whisper-large-v3-turbo 上线,速度更快(本地安装 )

Openai 上线语音模型whisper-large-v3-turbo 在本文中,我们将介绍 whisper-large-v3-turbo 以及 whisper-web(一个直接在浏览器中进行ML语音识别的开源项目)。 尽管近年来出现了许多音频和多模态模型,但Whisper 仍是生产级自动语音…

类型模板参数与非类型模板参数

在C中,模板参数分为两种类型:类型参数和非类型参数。类型参数是指定模板类型名称的参数,而非类型参数是指定模板整型常量的参数。 模板参数不限定于类型,普通值也可作为模板参数,但这里值的类型只能是整形家族&#x…

Qt教程(001):Qt概述与安装

文章目录 一、Qt概述1.1 什么是Qt1.2 Qt优点1.3 Qt发展史1.4 支持的平台1.5 成功案例1.6 下载安装1.7 QtCreator介绍 一、Qt概述 1.1 什么是Qt Qt是一个跨平台的C图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的&…

快乐数(c语言)

1.「快乐数」 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,那么这个数就是快乐数。如果 n 是 快乐数 就返…