Oracle Sharding: 云端分布式关系型数据库


Oracle Sharding现已正式登陆OCI Marketplace!支持云端全自动部署!感兴趣的小伙伴们快来抢先体验!

体验教程:https://medium.com/oracledevs/deploying-geo-distributed-oracle-database-on-oracle-cloud-infrastructure-oci-786ad3ec33c6

 

Oracle Sharding是什么?

Oracle数据库从12.2版本开始引入Sharding(分片)特性,集成了NoSQL和成熟的关系型数据库的优势,到如今已经经过多个版本迭代成为一整套成熟的分布式关系型数据库解决方案。Oracle Sharding可以让用户将数据分布和复制到一组Oracle数据库集群中,集群中的数据库只需要网络连接,不需要共享软件和硬件。Oracle Sharding可以为最严苛的应用提供线性扩展能力和完全容错能力。下面就让我们来详细介绍一下Oracle Sharding吧!

 

Oracle Sharding: 云端分布式关系型数据库

使用Oracle Sharding的优势有哪些呢?

  • 线性扩展

    Oracle Sharding采用无分享架构(shared-nothing architecture),消除了有分享架构带来的性能瓶颈,理论上可以提供无限的扩展性。目前支持最多1000个分片数据库。

  • 极致的可用性和故障隔离

    由于各个数据库分片不再共享硬件设备,集群的单点故障可以有效被消除。如果集群中的一个分片节点出现故障,其他节点的性能和可用性不会受到影响。与此同时,Sharding与Oracle Data Guard 和Oracle Golden Gate等技术高度集成,可进行自动配置并提供备份和故障恢复服务。在使用Data Guard备份时,Sharding集群支持滚动升级和自动主备库切换。

  • 数据可按地理位置分布

    Oracle Sharding支持数据的全球部署。在分片环境下,整个数据库集群组成单一逻辑数据库,其中的数据可以拆分储存到不同的地理位置。这种按照地理位置拆分数据的方式既可以满足数据隐私性的相关规定,也可以通过将数据存储到靠近客户地点的方式来获得更好的性能。

 

Oracle Sharding适用哪些应用场景呢?

  • 实时联机交易处理(OLTP)

    实时联机交易处理类应用一般具有以下特点:交易高吞吐量,大量的用户群体,海量的数据,严格的数据一致性要求和进行规模化数据管理的需求。这类应用一般包括:电商类应用、金融服务类应用(例如移动支付)、大规模软件即服务SaaS应用(例如账单处理、医疗)等。这些应用均可以从使用Oracle Sharding中获益。

  • 全球分布的应用

    许多企业级应用因为要服务不同国家和地区的客户群体,天然具备全球化分布的属性。Oacle Sharding可以在让分布在不同地区的应用客户端访问同一个逻辑数据库的同时,保证数据本地化存储和访问。这种架构的优点有:可以严格执行数据隐私性保护的相关法律规范,进行数据的本地化存储和访问;更低的数据跨地区复制和移动的开销;更优化的服务级别协议(SLA),因为系统在一个区域的维护和下线不影响其他地区;更简便的数据库管理。

  • 物联网和流数据处理

    这类应用通常要求快速的对海量数据进行收集和流处理。Oracle Sharding集成了基于直接路径(direct path)I/O的高性能流处理库。利用Oracle数据库的这项技术,应用可以以每秒钟上亿条记录的速度将从终端设备收集来的数据载入Sharding数据库。载入以后,用户便可以运用Oracle数据库的强大的分析能力立即对这些数据进行进一步处理。

  • 日志存储和检索

    结合Oracle数据库的原生JSON支持功能,Oracle Sharding可以被配置成为高性能分布式日志存储和全文检索引擎,同时具备弹性伸缩和高可用等特性。

  • 机器学习

    许多机器学习应用都要求对模型进行实时训练和评估。这类训练和评估很多都采用对某个特定标签的数据(例如某个用户的交易模式和设备使用情况)使用异常检测、聚类等算法。这类数据标签便可以被配置成为分片键(Sharding Key)来对数据集进行划分。利用Oracle数据库内置的机器学习算法,这些模型训练和评估的操作便可以直接在数据库内部进行,省去了单独构建相关基础设施和数据管线的操作。

  • 大数据分析

    当需要分析的数据大于单体数据库的承载能力的时候,Oracle Sharding可以帮助用户构建存储海量数据的数据仓库。Oracle 20c版本推出了联合分片(Federated Sharding)功能,可以帮助用户整合多个已有数据库中的数据,并对他们进行联合查询。用户可以直接把现有数据库建立成为联合分片集群,在集群上直接运行数据分析的SQL语句,省去了漫长的数据迁移流程。

  • 替代NoSQL数据库

    NoSQL解决方案大都缺乏关系型数据库的基本功能,例如SQL支持、复杂数据类型、多CPU扩展、在线模式(schema)修改、ACID特性等等。Oracle Sharding可以让用户在享受所有这些Oracle数据库优势的同时拥有近乎无限的水平扩展能力。


Oracle Sharding支持多种分片方式

用户可以使用多种模式来创建分片表,如基于分片键的一致性哈希(系统管理分片)、基于分片键范围或列表(用户自定义分片)或者两个层级相结合(混合分片)。

Oracle Sharding对于单个分片的要求非常宽泛,每一种数据库实例都可以作为一个分片,比如PDB,RAC集群,Exadata。

  • 系统管理分片

    不要求用户指定数据和分片的对应逻辑。系统会按照分片键的一致性哈希值自动将用户数据分布到不同的分片中。这种算法一般用于对数据进行随机均匀分片。

  • 用户自定义分片

    用户可以自己指定数据和分片对应逻辑。这种分片方式的应用场景一般是管理员要求完全控制数据的分布和移动,例如出于性能、监管、或其他原因,某些数据必须要存储到特定的分片上。

  • 混合分片

    用户可以将数据先按照一级分片键的范围或者列表分片,再数据按照二级分片键的一致性哈希进一步分片。混合分片结合了系统管理分片和用户自定义分片的优势,在诸如符合数据本地化保存的法规要求的场景下,混合分片可以让用户享受数据自动化分布和完全掌控数据存储位置的双重便利。

Oracle Sharding构建于分区表(table partitioning)的技术上,因此可以支持所有的二级分区方法。


灵活的客户端请求路由模式

Oracle Sharding 支持基于分片键的从应用到分片的直接路由、通过catalog节点进行代理路由、以及路由到中间件层(例如与数据库分片临近部署的应用容器、web容器等)。Oracle数据库的客户端驱动和连接池等组件都内置了对Sharding的支持。

  • 基于分片键直接路由

    Oracle的客户端驱动(JDBC, OCI, UCP, ODP.NET)可以根据连接字段中包含的分片键进行高效的基于数据的路由。连接层会维护一个分片路由缓存,每次通过查询该缓存直接将客户端请求路由到数据所在的数据库分片。

  • 代理路由

    若客户端SQL操作不指定分片键,该操作将由catalog节点进行代理路由。代理路由可以执行单分片SQL操作和跨分片SQL操作。

  • 中间件层路由

    在将数据层分片的基础上,用户可以进一步将web层和应用层分片,将这些中间件层按照他们服务的数据库分片进行分布,形成一种称为“泳道(swimlane)”的模式。用户可以配置网络层,使其可以根据客户端请求中的分片键将请求路由到对应的“泳道”中,从而与对应的数据库分片建立连接。


联合分片

Oracle 20c版本新增了联合分片(Federated Sharding)功能,可以将多个已有Oracle数据库组织为一个Oracle Sharding集群。

全球化的业务一般将同样的应用在不同的区域中部署很多份副本。联合分片功能可以整合这些应用的数据库实例,组成一个单一的联合数据库,从而提供以下优势:

  • 用户可以经由catalog节点对联合分片集群进行跨分片查询,形成多数据库到单一集群的无缝过渡。

  • 消除了由于数据分析和汇报等需求带来的数据复制

  • 允许同一张表在不同数据库中有结构变化,允许各成员数据库版本不同。


自动化部署

Oracle Sharding 可以通过Terraform, Kubernetes, Ansible 脚本的方式进行高度自动化的部署。这些部署脚本只需要一个简单的描述集群结构的配置文件作为输入,便能够在一台机器上运行,完成对于运行在其他各个机器上的整个数据库集群的部署。当发生错误时,部署脚本还可以进行暂停、继续、清理等操作。

与此同时,用户可以访问Oracle Cloud Marketplace 轻松在Oracle云服务上部署Sharding集群。


自动化数据迁移

使用Oracle Sharding 不要求应用对现有的SQL查询和修改的语句进行修改。Sharding在数据定义语言(DDL)中增添了新的语法用来创建和修改分片表(Sharded Table)和复制表(Duplicated Table)。与此同时,用户可以使用这两种工具来帮助实现从单机Oracle数据库迁移到Oracle Sharding。

  • Oracle Sharding Advisor

    从20c版本开始,Oracle Sharding引入了一个新的数据库迁移规划工具Sharding Advisor来帮助用户设计分布式数据库的模式(schema)。该应用通过分析用户现有数据库的模式和数据访问特点来推荐最优化的分布式数据库的模式,推荐算法可以基于并行度、减少跨分片链接查询或者减少重复数据等。

  • Oracle Data Pump

    Oracle Data Pump增加了对于Sharding的原生支持。现在用户可以在分片数据库上运行该工具直接将数据迁移到分片里。

 说了这么多,小伙伴们也需要注意,Oracle Sharding并不是所有数据库性能问题的终极解决方案哦。Oracle Sharding更适用于数据适合根据某些字段进行分片的应用场景。


想更进一步了解Oracle Sharding?

欢迎访问官方文档(点击阅读原文)更详细的了解Oracle Sharding特性!




上一篇:springboot with appache sharding 3.1 单库分表


下一篇:关于 Chrome 浏览器中 onresize 事件的 Bug