介绍:
数据被分布到多个 Shard 数据库。 Sharding 是一种 Sharded-nothing 的数据库构架,因为 Shard 不共享任何物理资源比如 CPU,内存以及存储。 从 DBA 的角度,一个 SDB 包含了多个或者是被统一管理或者是分别管理的数据库。 然而从应用管理的角度,一个 SDB 就像是一个数据库。Shard 的数量,数据库的分布,这些对于应用来讲都是透明的。
什么是 Sharding?
Oracle Sharing 是一个在多数据库中,水平分区数据的数据层的结构。 它的扩展性和可用性可以用来设计在离散的,不共享软硬件的数据库池中分布和复制数据的 OLTP 类型应用。 这个数据库池对于应用来讲就像是一个单独的逻辑数据库。应用可以通过添加数据库(Shard)到池内弹性地扩展到不同的平台。 Oracle Sharding 在当前版本可以最多扩展到1000个 Shard。 在复制方便,Sharding 支持 Oracle Dataguard 和 Oracle Golden Gate。
Shard 池内的数据库运行在不同的 server 以及他们专用的存储上。所有的 Shard 一起组成了逻辑的共享 Sharded 数据库,我们称之为 SDB。Shard 池内的每个数据库都包含了同样列,但是不同数据的表我们称之为 CHUNKS。 Sharding 是基于 Oracle Partitioning 技术。 Partitions 技术把一个大表分解成小的 partition。 Sharding 将每个 partition 分布到不同的数据库,这些数据库成为 Shard。 分区的数量决定了 Shard 的数量。
Sharding 应用 Global Data Service (GDS)框架来自动部署以及管理。 GDS 使用 GDSCTL 工具。GDS 的优点是,他提供了连接的负载均衡以及基于在 SDB(Shard Catalog)中的角色的路由。 GSM Manager 是一个提供客户端到 Shard 路由的中心组件。GSM 也叫做 Shard Director。 Shard catalog(SDB)存储了关于 Shard table 的信息。 而且他提供了集中的 schema 维护和查询。
Sharding 的优点:
极高的扩展性:Sharding 消除了性能的瓶颈,而且 Sharding 可以通过添加新的 Shard 来提高系统的性能和容量。
故障包容:Sharding 也可以消除单点故障(Shared 磁盘,SAN,集群等等)也可以提供故障的隔离: 一个 shard 的故障不会影响其他 shard 的使用。
全局的数据分布:Sharding 可以将目标数据存储在数据使用者本地区域,这样可以满足一些要求把数据存放在特定地方的管控的要求。
滚动升级:单个 shard 的配置变更不会影响其他的 Shard。 这样就让管理员可以现在一个小的范围内进行测试。
简化云的部署:因为一个 shard 的尺寸可以非常小,所以非常方便将 SDB 部署到包含很多低端自带存储服务器的云上。
Sharding 的种类:
有三种类型的 Sharding:
• 系统管理的 Sharding
• 用户自定义的 Sharding
• 混合类型 Sharding
系统管理的 Sharding:系统管理的 Sharding 不需要指定数据到 Shard 的映射关系. 数据会被使用 HASH 的分区方式自动分配到 Shard 里面. 用户不能决定数据的位置。这样的好处是避免了热点也可以把负载均衡到 Shard 的所有节点上。
用户自定义 Sharding:用户可以控制数据分布到指定的 Shard 上。这种方式当应用要求把对应的数据存放在指定的 Shard 里面 比较有用,而且用户也可以将数据在 Shard 之间移动。这么做的好处是,当系统维护的计划宕机以及由问题导致的 Shard 节点非计划宕机发生时,用户可以知道具体被影响的数据范围。但是这种模式的缺点是,用户需要自行维护数据以及负载在Shard节点间的平衡分布。用户自定义 Sharding 使用 Range 或者 List 的方式进行数据分区。另外 12.2.0.1 Beta 版不支持用户自定义 Sharding。
混合类型 Sharding:混合类型 Sharding 包含了系统管理的 Sharding 和 用户自定义 Sharding。数据会被先用 Range 或者 List 的方式进行分区,然后进一步分区到一致的 HASH。这些一致性的分区可以实现数据在一组 Shard 之间的均衡分布。
• 由系统管理 Sharding 和用户自定义 sharding 组成
• 数据使用 LIST 或者 RANGE 的方式分区
• 分区后的分区继续使用复合的方式分区




