关于分片技术(Sharding)
Sharding是一种数据层架构,就是对数据进行横向切割,并分布存储到不同的数据库。每个数据库部署在专门的服务器,即有单独的本地资源,例如CPU、内存、闪存或者磁盘。每个数据库就是一个分片。所有的数据库组成一个逻辑数据库,统称分片数据库(SDB)。
通过水平分区将一个数据库表拆分到不同分片,每个分片都包含相同的字段,只是数据集不一样。以这种方式被拆分的数据表叫做分片表。
我们来看一下以下这张图,水平将一个表数据拆分到不同分片。
通过上图,我们可以看出:
1、数据表是分布在三台服务器上,它们是无共享硬件基础设施,这样可以避免出现单点故障。同时分片在软件上也弱耦合的,它们不运行集群组件。
2、分片部署在专用的服务器,分片运行在单实例或者集群上。
3、分片是用于OLTP系统,因此分片片键规则的设计非常关键。
Oracle分片的优点
分片为OLTP系统提供了线性扩展及故障隔离的需要。
分片的主要优点有:
1、线性扩展:通过增加分片,可以线性扩展性能和处理能力,消除性能瓶颈。
2、故障隔离:分片是无共享硬件基础设施,可以避免单点故障,例如磁盘损坏。
3、跨地域分布部署:分片可以将特定的数据存储到特定的区域。
分片数据库组件
分片目录库 Shard Catalog
Shard Catalogr 主要用途是存储SDB元数据,跨片查询的协调数据库,同时包含应用的元数据定义和复制表。
分片导向器 ShardDirector
Shard Director提供从应用层到分片连接请求的路由导向。通过ONS FAN发布运行时SDB拓扑图,均衡负载的建议跨数据库服务故障切换和管理。同时也提供连接时负载均衡。
全局服务GlobalService
通过服务属性(serviceattributes)建立工作负载管理策略,本地服务优先 + {本地性, 复制时延, 角色, 数据库可选择性, 负载均衡目标}。
Sharding它解决三个关键问题
1、数据的路由:是数据库告诉应用程序,你让我查的数据目前在哪个分片上,这条路怎么走过去。
2、数据的分片:是实际数据的存放地点,往往每个分片就是一台单独的服务器(含存储)。
3、分片的元数据信息保存:是被切割放在不同的机器上,那么需要有个集中的地点存放数据分片的信息,即分片元数据的信息。
总结一下就是:应用问路由怎么走,路由去查询元数据得知需要的数据在哪个分片上,最终应用访问到该分片上。
Sharding适合所有的数据库应用吗?
既然Sharding听上去很厉害,那么是不是现在只要遇到有性能问题的数据库,一律都可以使用Sharding技术来解决呢?当然不,Sharding不会也不可能是FAST=TRUE这样的参数。一个适合Sharding技术的应用,必须有非常好的数据模型,和清晰的数据分布策略(比如是一致性哈希,范围或者列表分区),并且访问这些数据也是总要通过shard key来过滤的,只有这样,才能在整个Sharded数据库架构中很好地将请求路由到合适的数据库上。这样的shard key可能会是客户编号,国家编号,身份证号码等。
Sharding适合的业务场景
专用OLTP应用Custom OLTPApplications,海量扩展和高可用性MassiveScalability and HA
• 大规模计费系统 Largebillingsystems
• 航空票务系统Airline ticketingsystems
• 在线金融服务Onlinefinancialservices
• 媒体服务公司Mediacompanies
• 在线信息服务Onlineinformationservices
• 社交媒体公司Socialmediacompanies
总结
OracleSharding是分片数据层架构,数据是横向分区在独立的数据库。每个数据库的配置被称为分片单元。所有的分片单元在一起组成一个逻辑数据库,称为数据库分片。
它为企业提供了完整数据平台,对于业务系统需要分库分表,要线性水平扩展,没问题用Sharding最合适,它能做到自动化端到端的生命周期管理,为新一代开发者提供一个企业级的数据库平台。