Sharding是一种水平数据分片的架构。每个数据库都单独的有自己的本地资源(CPU、内存、硬盘)。这样的配置中,每个数据库被称作分片shard。所有的分片合并在一起凑成一个逻辑数据库,这个逻辑的数据库被称作分片数据库(SDB)。水平分片将一张数据库中的表拆分成多个分片,每个分片有相同的列,但是具有不同的行。因此这样的表也被称作(sharded table)。
Sharding它是一种shared-nothing的架构,它消除了单点故障(因为分片它不共享物理资源,如cpu、内存或存储设备),在软件方面也是松耦合的,它不需要运行集群软件。
从数据库管理员的角度来看,SDB由多个分片组成。这些分片可以集体管理,也可以单独进行管理,然而从应用程序使用的角度上来看,SDB就是一个数据库,分片的数量和数据在那个分片上对数据库应用程序来说都是完全透明的。
分片适用于OLTP应用程序,使用分片的应用程序必须具有良好的数据模型和数据分片的结构。例如(一致的hash、范围、列表或者是这些组合),主要使用分片切分的键值来访问数据。例如我们可以使用的分片键可以是customer_id、Account_no或Country_id等等。
那么sharding主要的好处是:
1.线性扩展。
Sharding消除了性能瓶颈,通过添加分片使得性能和容量能够线性缩放。
2.失败隔离
分片是一种shared nothing的基础架构,它消除了单点故障。例如共享磁盘、SAN网络和集群软件。它提供了很强的故障隔离机制,一个分片的出现了故障不会影响其他分片的可用性和性能。
3.数据地理分布
当数据必须位于特定的管辖区域时,分片可以将特定数据存储在靠近其消费者的位置并满足法规要求。
4.滚动式更新
在一个分片上应用配置更改不会影响其他分片,并且允许管理员首先测试一小部分数据的更改。
5.简化云部署
分片非常适合在云上部署。
与其他NoSQL数据库不同,Oracle分片提供了分片的好处,而不牺牲企业级RDBMS的功能。它支持:
1.关系模式
2.数据库分区表
3.关系型数据库的ACID四个基本要素,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
4.SQL和其他变成接口
5.复杂的数据类型
6.在线模式更改
7.多核可扩展性
8.高级安全性
9.压缩
10.高可用性
11.企业级备份和恢复
应用程序将数据库池看作是一个单一的逻辑数据库。通过添加数据库(分片),应用程序可以弹性地将数据、事务和用户扩展到任何级别、任何平台上。Oracle数据库支持扩展到1000个分片。
Oracle Sharding 主要包括下面组件:
Sharded database (SDB) :一个单独的逻辑的Oracle数据库,但是在物理上SDB包括多个物理独立的数据库,SDB类似一个数据库池(pool),数据库池 (pool)中包括多个数据库 (Shard)。
Shards:一个shards就是一个独立的分片,他们合在一起就组成了SDB。
Global service : 数据库的服务提供访问SDB中的数据。
Shard catalog :是一个Oracle数据库,它提供自动分片部署、分片数据库的集中管理、多分片查询等功能。例如应用查询多个shards的数据,那么会由Shared Catalog来统一进行协调分配。
所有配置的更改,例如添加和删除分片,还有global services都在上面执行。还有SDB上所有的DDL操作都需要连接到Shard catalog来执行。Oracle官方推荐使用Data Guard技术来实现shard catalog的高可用。假设Shard catalog出现了问题,此时配置了 DG就只会影响在出问题到切换成功的短时间内,执行的维护操作或是对多个Shards的查询。OLTP事务继续路由到指定的sdb执行,并不会受到中断的影响。
Shard directors:使用了全局服务管理组件GMS(global service manager component),通过sharding key,网络监听器,使应用层请求到shard的直接路由。
Connection pools:这里主要是中间件范畴,应用程序使用Oracle integrated connection pools(UCP、OCI、ODP.NET、JDBC)连接到分片数据库。
Management interfaces -通过使用GDSCTL (command-line utility) 接口和OEM(Oracle Enterprise Manager)来管理sharding。