19-Oracle 23 ai Database Sharding-知识准备

小伙伴是不是经常遇见大规模集群和数量的时候,业务就提出要对数据进行sharding。

Oracle 和其他数据库(如 MySQL、PostgreSQL、MongoDB 等)

为什么要进行分片(sharding),分片的原因是什么,实现的原理又分别是什么。

核心目标:解决大规模数据存储和高并发访问的性能瓶颈,具体如何落地,策略和步骤是什么?

一、为什么要 Sharding

解决数据库扩展性问题
  • 单节点性能瓶颈:传统数据库(如 Oracle RAC)依赖共享存储架构,当数据量或并发请求增长时,单节点的 I/O、CPU 或内存可能成为瓶颈,导致性能下降。
  • 成本与复杂度:垂直扩展(Scale Up)需要昂贵的高端硬件,而分片(Scale Out)通过廉价服务器横向扩展,显著降低成本。
  • 数据主权与地理分布:某些场景(如跨国业务)需要将数据按地理位置分片,以满足合规性要求。
应对高并发与大数据量
  • 响应时间线性增长:随着数据量增加,单个数据库的查询响应时间呈指数增长。
  • 负载均衡:分片将数据和请求分散到多个节点,避免单点过载,提升整体吞吐量。
提高可用性与容错性
  • 故障隔离:单个分片故障不会影响其他分片的数据可用性。
  • 动态扩展:新增分片时无需停机,系统可自动调整数据分布。
数据主权与合规性
  • 法律要求:某些国家/地区要求数据本地化存储,分片可按地理位置划分数据(比如跨国、跨地域企业数据留在本地)。

分片不是优化手段,而是架构层面的质变,解决单点数据库的先天局限。这一点和从前规划大数据成千G上TB的规模,其实最后真正可用数据就是百G规模,又是另外一个话题了。 

二、Sharding 的实现原理

Sharding 的核心是 将数据按规则分布到多个分片,并通过协调机制保证一致性。以下是关键实现原理:
分片策略(Sharding Strategy)
  • 哈希分片(Hash-based):对分片键(如用户 ID)进行哈希计算,决定数据归属的分片。优点是数据分布均匀,但动态扩容时需重新计算哈希值。
  • 例如:shard_id = hash(user_id) % N(N 为分片数)。
  • 范围分片(Range-based):按分片键的范围划分数据(如用户 ID 1-1000 存分片 A,1001-2000 存分片 B)。适用于有序数据(如时间序列),但可能导致数据倾斜。
  • 列表分片(List-based):手动指定某些特定值的分片归属(如按地区划分用户)。适用于已知的静态数据分布。
  • 复合分片(Composite):结合多种策略(如先按范围分片,再按哈希分片),兼顾灵活性与负载均衡(Oracle 的复合分片)。
数据路由与查询协调
  • 客户端路由:应用程序直接根据分片键计算目标分片(Oracle 的“基于密钥的路由”)。
  • 代理层路由:通过中间件(如 Proxy、Sharding-JDBC)解析 SQL 并路由到对应分片。
  • 分片目录(Sharding Catalog):维护分片映射信息,动态更新分片位置(Sharding-JDBC 的 SQL 解析与改写)。
事务与一致性
  • 本地事务:分片内事务由数据库自身保证 ACID。
  • 跨分片事务:需引入分布式事务协议(如两阶段提交、TCC),但会牺牲部分性能。
  • 最终一致性:通过异步复制或事件驱动实现跨分片数据同步(复制与分片结合)。
分片管理与运维
  • 动态扩缩容:新增或移除分片时,需重新平衡数据(Elasticsearch 的 API 调整分片分布。
  • 数据迁移:通过工具或脚本将数据从旧分片迁移到新分片( MongoDB 的 sh.moveChunk())。
  • 监控与调优:实时监控分片负载,避免数据倾斜。

三、Oracle Sharding 的特殊性

Oracle 的 Sharding 的特性:
与表分区的兼容性 :--国产数据努力啊,业界分布式那么多,分片兼容太重要了。
  • Oracle Sharding 基于表分区实现,支持所有分区方法(如范围、哈希、列表),并允许复合分片(两级分片)。
事务一致性
  • 支持跨分片的事务性操作(如复杂连接、触发器),并通过分布式锁机制保证一致性。
客户端直连
  • 支持应用程序直接连接分片,无需中间代理,减少延迟(通过 JDBC 驱动程序直接路由)。
高可用性
  • 每个分片可配置主从副本,实现故障自动切换。

四、Oracle Sharding 功能多版本对比

1. Oracle 19c 的 Sharding 特性
多表家族支持
  • 允许在单个数据库中定义多个表家族(Table Families),每个表家族可基于不同的分片键(Sharding Key)进行分片,提升分片策略的灵活性。例如:订单表按用户 ID 分片,日志表按时间分片,满足不同业务场景需求。
Data Guard 备库 DML 自动重定向
  • 支持将备库上的 DML 操作自动重定向到主库执行,确保 ADG(Active Data Guard)的 ACID 一致性。
RAC 集群增强
  • 改进 RAC 集群的连续性保持机制,节点故障时事务可连续运行,提高高可用性。
Far Sync 特性
  • 通过在主库附近配置 Far Sync 实例,降低主备同步压力,确保数据零丢失。
2. Oracle 23 ai 的 Sharding 新特性
Oracle 23ai 在 Sharding(分片)领域延续了 Oracle 19c 的核心功能,并在此基础上引入了多项创新特性,结合分布式数据库和 AI 技术,进一步增强了分布式数据库的扩展性、高可用性和智能化管理能力:
基于 Raft 协议的分布式 Sharding
特性:
  • 全局分布式数据库(Globally Distributed Database)支持 Raft 复制协议,替代传统主从复制(如 Oracle 19c 的 Far Sync)。
  • 在节点或数据中心中断时,实现 亚秒级故障切换(<3 秒),确保零数据丢失。
优势:
  • 提升跨地域分片的可靠性,满足跨国业务的合规性需求(如数据本地化存储)。
  • 通过 Raft 协议的强一致性机制,减少数据同步延迟。
True Cache 与 Sharding 结合
特性
  • True Cache 是内存中的一致性缓存服务,支持与 Sharding 联动。
  • 在分布式分片场景下,缓存热点数据以加速查询响应。
优势
  • 通过缓存减少跨分片的网络开销,提升读写性能。
  • 支持自动化的缓存管理(如 LRU 策略),无需手动干预。
自动化分片管理
特性
  • 动态扩缩容时,自动平衡数据分布(如新增分片后重新分区)。
  • 通过 AI 驱动的负载分析,优化分片键选择(如检测热点数据并建议调整分片策略)。
优势
  • 简化运维复杂度,减少人工干预。
  • 避免数据倾斜,提升整体系统吞吐量。
Shrink Tablespace 与分片存储优化
特性
  • 新增 Shrink Tablespace 功能,支持收缩大文件表空间(Bigfile Tablespace),回收未使用空间。
优势
  • 在分片场景下,优化存储成本,匹配实际数据量。
JSON 与关系模型的统一分片
特性
  • 结合 JSON 关系二元性(JSON-Relational Duality),支持将 JSON 文档与关系表统一分片。
  • 例如:用户表按用户 ID 分片,同时关联的 JSON 日志数据可存储在同一分片中。
优势
  • 简化数据模型设计,避免跨分片的复杂 JOIN 操作。
AI Vector Search 与分片集成
特性
  • 支持在分片数据库中存储和查询向量数据(如 AI 向量搜索),结合分片策略实现分布式语义检索。
优势
  • 在海量非结构化数据(如图像、文档)场景下,提升搜索效率。

3. 对比列表 

功能维度

Oracle 19c

Oracle 23ai

复制协议

Far Sync(异步/半同步复制)

Raft 协议(强一致性、快速故障切换)

分片管理

手动扩缩容,需人工调整分片策略

AI 驱动的自动化扩缩容与负载均衡

缓存机制

无原生缓存

True Cache 集成,加速分片查询

存储优化

传统表空间管理

Shrink Tablespace 回收未使用空间

AI 集成

AI Vector Search、自动分片键优化

高可用性

RAC 集群增强

Raft 协议保障亚秒级故障切换

五、典型应用场景

跨国企业数据本地化
  • 利用 Raft 分布式 Sharding,将用户数据按地域分片存储(国内出海企业将用户分片部署在 EU 区域,国内用户数据留在本地),满足合规要求。
高并发电商系统
  • 结合 JSON 关系二元性,将订单表(按用户 ID 分片)与 JSON 格式的用户行为日志统一管理,避免跨分片查询。
AI 驱动的推荐引擎
  • 使用 AI Vector Search 在分片数据库中存储商品特征向量,支持分布式语义搜索,提升推荐效率。

六、分片的挑战与优化策略

数据倾斜与热点问题
  • 优化策略:选择高基数的分片键(如用户 ID 而非性别),动态调整分片策略。
跨分片查询复杂性
  • 优化策略:避免跨分片的 JOIN 或聚合操作,通过冗余存储或中间层缓存结果。
分片键的选择
  • 错误示例:使用低基数字段(如性别)作为分片键,导致数据分布不均。
  • 正确示例:使用高频查询字段(如订单 ID)或业务逻辑相关的字段(如用户 ID)。
动态扩展成本
  • 优化策略:预估数据增长趋势,提前规划分片数量;使用自动分片工具(国产 TiDB 就支持自动分片的特性)。

七、Sharing在Oracle 23ai实践是不是最好的选择呢?

Sharding 的本质是 通过分布式架构解决单节点数据库的扩展性瓶颈,其核心在于合理设计分片策略、协调分布式事务,并通过动态管理应对数据增长和故障。无论是 Oracle 还是开源数据库,Sharding 都是应对海量数据和高并发场景的关键技术,但其复杂性需要权衡性能、一致性和运维成本。
Oracle 23ai 的 Sharding 特性在 Oracle 19c 基础上,通过 Raft 协议、True Cache、AI 自动化管理向量搜索集成,显著提升了分布式数据库的可靠性、性能和智能化水平。其核心变化体现在 更强的分布式一致性、更低的运维成本 以及 更灵活的数据模型支持,为大规模、高并发的云原生应用提供了更优解决方案。

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

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

相关文章

分类与逻辑回归 - 一个完整的guide

线性回归和逻辑回归其实比你想象的更相似 &#x1f603; 它们都是所谓的参数模型。让我们先看看什么是参数模型&#xff0c;以及它们与非参数模型的区别。 线性回归 vs 逻辑回归 线性回归&#xff1a;用于回归问题的线性参数模型。逻辑回归&#xff1a;用于分类问题的线性参数…

英语写作中“每一个”each individual、every individual、every single的用法

一、Individual &#xff1a;个体&#xff0c;相对于团体&#xff0c;例如&#xff1a; Individual competition &#xff08;个人比赛&#xff09;&#xff0c;相对于team competition &#xff08;团体比赛&#xff09; Individual users &#xff08;个人用户&#xff09;…

由于 z(x,y) 的变化导致的影响(那部分被分给了链式项)

✅ 本质问题&#xff1a;为什么链式法则中 ∂ F ∂ x \frac{\partial F}{\partial x} ∂x∂F​ 不考虑 z z ( x , y ) zz(x,y) zz(x,y)&#xff1f; &#x1f50d; 一、关键是&#xff1a;偏导数的定义是什么&#xff1f; 我们从最根本的定义开始&#xff1a; ∂ F ( x , y…

python打卡day44@浙大疏锦行

知识点回顾&#xff1a; 预训练的概念常见的分类预训练模型图像预训练模型的发展史预训练的策略预训练代码实战&#xff1a;resnet18 作业&#xff1a; 尝试在cifar10对比如下其他的预训练模型&#xff0c;观察差异&#xff0c;尽可能和他人选择的不同尝试通过ctrl进入resnet的…

十一(3) 类,加深对拷贝构造函数的理解

class ClassName { public: // 拷贝构造函数&#xff1a;参数是同类型对象的引用&#xff08;通常为 const 引用&#xff09; ClassName(const ClassName& other) { // 复制 other 的成员变量到当前对象 } }; 参数要求&#xff1a;必须是同类型对象的引用&#xff0…

网页后端开发(基础1--maven)

maven的作用&#xff1a; Maven是一款管理和构建Java项目的工具。 1.依赖管理&#xff1a; 方便快捷的管理项目依赖的资源&#xff08;jar包&#xff09; 不用手动下载jar包&#xff0c;只需要中maven中引用&#xff0c;maven会查找本地仓库。若本地仓库没有&#xff0c;会直…

认识电子元器件---高低边驱动

目录 一、基本概念 二、关键参数对比 三、工作原理 &#xff08;1&#xff09;高边驱动 &#xff08;2&#xff09;低边驱动 四、典型的应用场景 五、如何选择 一、基本概念 可以理解成&#xff1a;高低边驱动是MOS/IGBT的一种应用方式 高低边驱动是电路拓扑概念&#…

JavaScript 标签加载

目录 JavaScript 标签加载script 标签的 async 和 defer 属性&#xff0c;分别代表什么&#xff0c;有什么区别1. 普通 script 标签2. async 属性3. defer 属性4. type"module"5. 各种加载方式的对比6. 使用建议 JavaScript 标签加载 script 标签的 async 和 defer …

C/CPP 结构体、联合体、位段内存计算 指南

C/CPP 结构体、联合体、位段内存计算 指南 在C语言中&#xff0c;结构体、联合体和位段是对数据的高级抽象&#xff0c;它们可以让程序员以更易于理解的方式来操作复杂的数据结构。然而&#xff0c;这些结构在内存中的布局可能并不如它们的语法结构那样直观&#xff0c;特别是当…

ASR(语音识别)语音/字幕标注 通过via(via_subtitle_annotator)

文章目录 1 VIA 官网资料2 语音/字幕标注3 键盘快捷键常规当一个时间片段被选中时图像或视频帧中的空间区域 1 VIA 官网资料 VIA官网&#xff1a;https://www.robots.ox.ac.uk/~vgg/software/via/ VIA官网标注示例&#xff1a;https://www.robots.ox.ac.uk/~vgg/software/via/…

mq安装新版-3.13.7的安装

一、下载包&#xff0c;上传到服务器 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-generic-unix-3.13.7.tar.xz 二、 erlang直接安装 rpm -ivh erlang-26.2.4-1.el8.x86_64.rpm不需要配置环境变量&#xff0c;直接就安装了。 erl…

高通平台PCIE EP模式log丢失问题

高通平台PCIE EP模式log丢失问题 1 问题背景2 问题分析2.1 对比USB2.1.1 Logtool优化2.1.2 Device mhi与fs对比2.2 优化方案2.2.1 Diag系统优化2.2.2 Host mhi优化3 最终成果1 问题背景 高通5G模组如SDX55\SDX62\SDX65\SDX72\SDX75等支持pcie ep模式。会通过pcie与host(如MT7…

Python应用输入输出函数

大家好!在 Python 编程中&#xff0c;输入输出函数是与用户进行交互的桥梁。通过输入函数&#xff0c;我们可以获取用户的输入数据&#xff1b;通过输出函数&#xff0c;我们可以向用户展示程序的运行结果。对于初学者来说&#xff0c;掌握基本的输入输出操作是编程入门的重要一…

如何使用 Ansible 在 Ubuntu 24.04 上安装和设置 LNMP

在当今世界,自动化是有效管理和部署 Web 应用程序的关键。Ansible 是一个强大的自动化工具,它是一款开源软件配置、配置管理和应用程序部署工具。本文将指导您使用 Ansible 在 Ubuntu 服务器上安装 LNMP 堆栈(Linux、Nginx、MySQL、PHP)。 先决条件 为了执行本指南中讨论的…

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…

RK3288项目(四)--linux内核之V4L2框架及ov9281驱动分析(中)

目录 一、引言 二、V4L2其他部件驱动分析 ------>2.1、mipi-dphy ------------>2.1.1、dts ------------>2.1.2、driver ------------>2.1.3、notifier机制 ------------>2.1.4、异步回调 ------------>2.1.5、V4L2 subdev ------>2.2、mipi-csi…

容器-使用slim减少10x+大模型镜像

slim&#xff08;原docker-slim&#xff09;是一个开源工具&#xff0c;全称SlimToolkit&#xff08;https://github.com/slimtoolkit/slim&#xff09;&#xff0c;用于基于已有的Docker镜像减小镜像的大小&#xff0c;同时尽可能保留容器的功能。它通过分析镜像的运行环境和应…

Golang基础学习

​​​​​​​​​​ 初见golang语法 go项目路径 cd $GOPATH //ls可以看到有bin,pkg,src三个文件 cd src/ mkdir GolangStudy cd GolangStudy mkdir firstGolanggo程序执行&#xff1a; go run hello.go//如果想分两步执行&#xff1a; go build hello.go ./hello导入包的…

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…

电路图识图基础知识-远程/本地启停电动机(二十一)

在实际的生产中&#xff0c;经常会需要电动机的控制可以就地控制和远方控制&#xff0c;在集中的控制室中&#xff0c;远 方控制电动机的启动、停止。在就地设置启动、停止按钮或是紧急停车按钮&#xff0c;以满足生产的需要。 1.远程、多点及连锁控制电动机电路 2.元器件配置…