Oracle Sharding:开启Oracle数据分布时代
Posted 蒙马软件
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle Sharding:开启Oracle数据分布时代相关的知识,希望对你有一定的参考价值。
sharding是一种将数据水平分区跨越多个独立数据库的数据架构。
每一个数据库放置在拥有自己本地资源(CPU、内存、闪存和磁盘)的专用服务器上。这种配置方式的每个数据库被称为一个shard。所有的shard一起构成一个逻辑数据库,称为sharded database(SDB)。
水平分区涉及将数据库表分离到各个shard,使得每个shard都含有表的相同列,区别只在于表内行数据的不同子集。用这种方式进行数据分离的表称为sharded table。
下图展示了跨越三个shard的数据表的水平分区
Sharding是一种基于shard-nothing的硬件基础架构,同时消除了单点故障,因为每个shards并不共享诸如CPU、内存或者存储设备等等的物理资源。就软件而言shards也是低耦合,非集群运行。
一般情况下shard存在于专用服务器上,这些服务器可以是普通硬件配置的机器也可以是专业服务器。Shards可以运行在单实例数据库也可以是RAC数据库。
从DBA的观点看,一个SDB包含多个可以被集成管理或者单独管理的数据库。然而从应用程序的角度看,一个SDB看上去就像一个单独的数据库:shard的数量和数据的具体分布对于应用程序是完全透明的。
Sharding技术更倾向于传统的OLTP应用架构。使用Sharding的应用程序必须有良好的数据定义模型和数据分布策略。
对于很多环境要求苛刻的OLTP应用程序来说,sharding提供了线性扩展和完整的失败隔离功能。
Sharding的关键优势包括:
线性扩展。Sharding消除了性能瓶颈并且通过添加shard来线性扩展性能和容量。
失败隔离。Sharding是一种shard-nothing硬件技术,它消除了单点失败(比如共享盘、SAN和集群软件)并且提供了强有力的失败隔离---失败的或者低效的shard不会影响其它shard的性能和可用性。
按地理位置分布数据。可以选择根据不同地理位置,把数据存储在不同的shard里。
滚动升级。同一时间在一个shard上应用配置修改不会影响其它shard,允许管理员先测试一小部分数据。
简化云部署。Sharding很好地适合在云端部署。Shard可以按需求定制大小以提供服务而不管云基础架构是否可用。
Oracle Sharding可以在横跨不共享硬件和软件的Oracle数据库池里分布和复制数据。应用程序把数据库池视作单个逻辑数据库,应用程序可以通过添加数据库(shard)到池中,从而实现在任意平台上弹性地扩展数据、事务和用户至任意级别。Oracle Database 12c Release 2(12.2.0.1)支持扩展到1000个shard。
下图展示了Oracle Sharding的主要架构组件:
Sharded Database(SDB) --- 一个跨越物理Oracle数据库(shard)池的水平分区的逻辑数据库。
Shards --- 一个部署有共享数据库子集的单独的物理Oracle数据库。
Global service --- 在一个SDB中提供访问数据的数据库服务。
Shard catalog --- 一个提供自动共享部署、集中管理的Oracle数据库。
Shard directors --- 基于共享密钥的网络监听,允许高性能网络连接和路由。
Connection pools --- 运行时通过连接池路由数据库连接请求。
Management interfaces --- GDSCTL(命令行工具)和Oracle企业管理器(GUI)
支持3种不同的分区方法:
System-Managed Sharding --- 不需要用户定义数据如何映射到shard,数据通过分区的“一致性哈希”算法自动分布到各个shard。分区算法均匀地、随机地分布数据到shard。
Composite Sharding --- 允许用户对使用“一致性哈希”算法进行分区的表的不同数据子集创建多个共享空间。一个共享空间是一组存储数据的shard,存放一定范围和列表的数据。
Subpartitions with Sharding --- 由于Oracle Sharding是基于表分区的,所以所有Oracle数据库提供的子分区方法都支持sharding。
关注我们
以上是关于Oracle Sharding:开启Oracle数据分布时代的主要内容,如果未能解决你的问题,请参考以下文章