什么是分片(Sharding)
分片是一种划分数据以分配计算和存储工作量的方法,有助于实现超规模计算。
超规模计算是一种计算体系结构,可以快速扩展或缩小,以满足对系统日益增长的需求。这种架构创新最初是由运行分布式站点的互联网巨头推动的,并已被大型云提供商采用。
公司通常使用一种称为数据库分片的技术来实现超规模计算,在这种技术中,他们将数据集的片段分布在多台不同计算机上的多个数据库中。
分片使用无共享架构,其中分片不共享硬件或软件。所有分片一起构成一个逻辑数据库,称为分片数据库。
从应用程序的角度来看,分片数据库看起来像一个单独的数据库:分片的数量以及数据在这些分片上的分布对数据库应用程序来说是完全透明的。从数据库管理员的角度来看,分片数据库由多个可以共同管理的数据库组成。
跨数据库分片分布表
关于Oracle Sharding
Oracle Sharding 是Oracle 数据库的一项功能,它允许您在不共享硬件或软件的 Oracle 数据库池中自动分发和复制数据。Oracle Sharding 提供了成熟 RDBMS 和 NoSQL 数据库的最佳特性和功能。
注意:Oracle Database 21c 不支持 Oracle GoldenGate 复制
对 Oracle Sharding High Availability 的支持。
Oracle Sharding 作为分布式分区
分片(Sharding)是一种基于跨多个独立物理数据库的数据水平分区的数据库扩展技术。这种配置中的每个物理数据库都称为分片。
从应用程序的角度来看,Oracle Sharding 中的分片数据库看起来像一个单独的数据库;分片的数量以及数据在这些分片上的分布对应用程序完全透明。
尽管对应用程序和应用程序开发人员来说,分片数据库看起来像是一个单一的数据库,但从数据库管理员的角度来看,分片的数据库由一组离散的 Oracle 数据库组成,每个数据库都是一个单独的分片,可以集中管理。
分片表跨分片数据库的所有分片进行分区。每个分片上的表分区与可以在未分片的 Oracle 数据库中使用的分区没有区别。
下图显示了单个逻辑数据库上的分区与分布在多个分片上的分区之间的区别。
当您执行 CREATE SHARDED TABLE 语句时,Oracle Sharding 会自动在分片之间分配分区,并且分区的分配对应用程序是透明的。
Oracle Sharding 的好处
Oracle Sharding 为最苛刻的应用程序提供了线性可扩展性、完整的故障隔离和全局数据分发。
Oracle Sharding 的主要好处包括:
Oracle Sharding 无共享体系结构消除了性能瓶颈,并提供了无限的可扩展性。Oracle Sharding 支持扩展到1000个分片。
消除了单点故障,因为分片不共享软件、CPU、内存或存储设备等资源。一个分片的故障或减速不会影响其他分片的性能或可用性。
分片由 Oracle MAA 最佳做法解决方案(如 Oracle Data Guard 和 Oracle RAC)保护。
分片的计划外停机或计划内维护只影响该分片上数据的可用性,因此只有该数据的一小部分用户受到影响,例如,在故障切换断电期间。
分片支持全局数据库,其中单个逻辑数据库可以分布在多个地理位置。这使得满足数据隐私监管要求(数据主权)成为可能,并允许在消费者附近存储特定数据(数据邻近性)。
使用数据库分片的示例
Oracle Sharding 为各种用例提供了好处。
实时 OLTP 应用程序具有非常高的事务处理吞吐量、庞大的用户群、巨大的数据量,并且需要严格的数据一致性和大规模管理。一些例子包括面向互联网的消费者应用、金融应用(如移动支付)、大型 SaaS 应用(如账单和医疗应用)。将 Oracle Sharding 用于此类应用程序的好处包括:
许多企业应用程序本质上是全球性的,同一个应用程序为多个地理位置的客户服务。此类应用通常使用跨多个地理区域共享的单个逻辑全局数据库。共享全局数据库的好处包括:
通常,此类应用程序收集大量数据并以非常高的速度进行流式传输。Oracle Sharding 优 化了数据流库,使用 Oracle 数据库的直接路径I/O技术将数据以极高的速度加载到分片数据库中。这些应用程序的数据负载要求可以达到每秒100到数百万条记录。一旦数据直接加载到数据库中,就可以通过高级查询处理和分析功能立即进行处理。
许多机器学习应用程序需要实时对模型进行训练和评分。使用异常检测等算法对许多应用程序进行模型训练和评分,聚类是特定于给定实体的(例如,给定用户在一天中某个时间的金融交易模式或特定设备度量)。这种数据可以通过使用特定于用户或设备的分片密钥轻松共享。此外,Oracle 数据库机器学习算法可以直接应用于数据库中,无需单独的数据管道和机器学习处理基础设施。
当你有太字节的数据时,分片意味着你不必存储数据来对其进行分析。Oracle Sharding 拥有多达1000个分片的容量,可以将关系数据库转变为仓库大小的数据存储。使用联合分片化解决方案,可以将运行同一应用程序的不同位置的多个数据库安装转换为联合分片化数据库,这样您就可以在不移动数据的情况下运行数据分析。
NoSQL解决方案缺乏主要的 RDBMS 功能,如关系模式、SQL、复杂数据类型、在线模式更改、多核可扩展性、安全性、ACID 属性、单分片操作的 CR 等。使用 Oracle 分片,您可以获得 NoSQL 几乎无限制的扩展和分片,以及 Oracle 数据库的所有功能和优势。
灵活的部署模型
Oracle Sharding 的无共享架构允许您将数据保存在本地、云中或云和本地系统的混合中。因为数据库分片不共享任何硬件资源,所以分片可以存在于各种本地和云系统上的任何位置。
您可以选择在本地部署所有分片,将它们全部放在云中,也可以将它们在云系统和本地系统之间拆分,以满足您的需要。
分片可以部署在所有数据库部署模型上,如单实例、Exadata 和 Oracle RAC。
Oracle Sharding 中的高可用性
Oracle Sharding 与 Oracle Data Guard 紧密集成,以提供高可用性和灾难恢复。复制在创建分片数据库时自动配置和部署。
Oracle Data Guard 复制维护分片(主)的一个或多个同步副本(备用),以实现高可用性和数据保护。备用可以在本地或远程部署,在使用 Oracle Active Data Guard 时,也可以以只读方式打开。当应用程序需要严格的数据一致性和零数据丢失时,请使用此选项。
Oracle GoldenGate 用于细粒度的主动-主动复制。尽管应用程序必须能够在潜在故障切换时处理冲突和数据丢失。
注意:Oracle Database 21c 不支持 Oracle GoldenGate 复制
对 Oracle Sharding High Availability 的支持。
或者,您可以使用 Oracle RAC 实现分片级高可用性,并辅以复制,以在群集中断时保持分片级数据可用性。每个分片都可以部署在 Oracle RAC 集群上,为其提供即时保护,避免节点故障。例如,每个分片可以是两个节点的 Oracle RAC 集群。
Sharding 方法
因为 Oracle Sharding 基于表分区,所以 Oracle 数据库提供的所有子分区方法 Oracle Sharding 也的支持。数据分片方法控制数据在分片上的位置。Oracle 分片支持系统管理、用户定义或复合分片方法。
系统管理的分片不需要将数据映射到分片。通过使用一致哈希进行分区,数据自动分布在分片之间。分区算法将数据均匀且随机地分布在分片上。
用户定义的分片允许您明确指定数据到各个分片的映射。当由于性能、监管或其他原因,某些数据需要存储在特定的分片上,并且管理员需要完全控制分片之间的数据移动时,使用该方法。
复合分片允许您使用两级分片。首先,数据按范围或列表进行分片,然后通过一致的散列进一步进行分片。
在许多用例中,特别是对于数据主权和数据接近性要求,复合分片方法提供了系统管理和用户定义分片方法中的最佳方法,为您提供了所需的自动化和对数据放置的控制。
客户端请求路由
Oracle Sharding 支持从应用程序到分片的直接、基于密钥的路由,通过代理使用分片目录进行路由,以及路由到中间层,如应用程序容器、web 容器等,这些层与分片密切相关。Oracle 数据库客户端驱动程序和连接池支持分片。
Oracle 客户端驱动程序(JDBC、OCI、UCP、ODP.NET)可以识别连接字符串中指定的分片键,以实现高性能数据相关路由。连接层中的分片路由缓存用于将数据库请求直接路由到数据所在的分片。
Oracle Sharding 支持对不指定分片键的查询进行路由,使任何数据库应用程序都可以灵活地运行 SQL 语句,而无需指定应在其上执行查询的分片。代理路由可以处理单分片查询和多分片查询。
除了分割数据层之外,您还可以分割 web 层和应用层,分发这些中间层的分片以服务于一组特定的数据库分片,从而创建一种称为泳道(swim lane)的模式。智能路由器可以根据特定的分片密钥将客户端请求路由到适当的泳道,泳道又在其分片子集上建立连接。
查询执行
不需要更改查询和 DML 语句即可支持 Oracle Sharding。大多数现有的 DDL 语句在分片数据库上的工作方式与在非分片 Oracle 数据库上的相同,具有相同的语法和语义。
正如 DDL 语句可以在配置中的所有分片上执行一样,某些 Oracle 提供的 PL/SQL 过程也可以执行。
Oracle Sharding 在 SQL DDL 语句中也有自己的关键字,只能在分片数据库中运行。
高速数据输入
SQL*Loader 支持将数据直接加载到数据库分片中,以实现高速数据摄取。
SQL*Loader 是一个大数据量加载的工具,用于将数据从外部文件移动到 Oracle 数据库中。它的语法类似于 DB2 加载实用程序,但有更多选项。SQL*Loader 支持各种加载格式、选择性加载和多表加载。其他好处包括:
自动化部署
使用Terraform、Kubernetes和Ansible脚本,分片数据库部署高度自动化。
部署脚本采用一个简单的输入文件来描述所需的部署拓扑,并从单个主机运行,将分片部署到所有分片数据库主机。脚本中包含暂停、恢复和清理操作,以防出现错误。
数据迁移
Sharding Advisor 工具有助于分片数据库模式设计,以便从非分片数据库迁移到分片数据库。Oracle Data Pump 支持分片,用于将数据从非分片的 Oracle 数据库迁移到分片的数据库。
Sharding Advisor 是 Oracle Sharding 提供的一个工具,它可以通过分析当前的数据库模式和工作负载,并推荐 Oracle Sharding 拓扑配置和数据库模式设计,帮助您设计最佳的分片数据库配置。Sharding Advisor 基于关键目标提出建议,如并行性(在分片之间均匀分布查询执行)、最小化跨分片连接操作和最小化重复数据。
通过在每个分片上运行 Oracle data Pump,可以将数据直接加载到分片中。这种方法非常快速,因为整个数据加载操作可以在加载具有整个数据集的最大子集的分片所需的时间段内完成。
分片的生命周期管理
Oracle Sharding 命令行界面和 Oracle Enterprise Manager 可帮助您管理分片数据库。
使用提供的工具,您可以:
联合分片
将多个现有数据库统一为一个分片数据库架构。
全球企业可能会为多个地区的多个部门部署同一应用程序的多个实例。联合分片允许将此类应用程序的数据库映射到单个联合数据库,并提供以下好处。
Oracle Sharding 21c 的新功能
以下是 Oracle Database 21c 中 Oracle Sharding 的主要新功能。
Sharding Advisor 是 Oracle Sharding 提供的一个工具,它可以通过分析当前的数据库模式和工作负载,并推荐 Oracle Sharding 拓扑配置和数据库模式设计,帮助您设计最佳的分片数据库配置。ShardingAdvisor 基于关键目标提出建议,如并行性(在分片之间均匀分布查询执行)、最小化跨分片连接操作和最小化重复数据。
联合分片允许您将多个现有数据库统一到一个分片数据库体系结构中。在联合分片配置中,Oracle 分片将每个独立的数据库视为一个分片,因此可以对这些分片发出多分片查询。
集中式备份和恢复为分片数据库备份和恢复操作提供了一个自动化、集中化的管理和监控基础架构,包括使用Oracle MAA最佳做法记录这些操作。