您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > Oracle 数据库 12c新特性-Oracle Sharding简介
Oracle数据库12c新特性-OracleSharding简介OracleSharding简介================OracleSharding是Oracle12.2版本推出的新功能,也称为数据分片,适用于onlinetransactionprocessing(OLTP).OracleSharding基于表分区技术,是一种在数据层将数据水平分区存储到不同的数据库的技术.Sharding可以实现将一个分区表的不同分区存储在不同的数据库中,每个数据库位于不同的服务器,每一个数据库都称为shard,这些shard组成一个逻辑数据库,称为shardeddatabase(SDB).这个table也称为shardedtable,每个shard数据库中保存该表的不同数据集(按照shardingkey分区),但是他们有相同的列(columns)。Shard是一种shared-nothing技术,每个shard数据库使用独立的服务器硬件(CPU,内存等)。Shard可以运行在单机数据库或者DATAGUARD/ADG数据库。OracleSharding优势================OracleSharding技术提供线性扩展和失败隔离的优点:线性扩展:因为每个shard是一个独立的数据库,通过增加新的Shard节点,来线性扩展性能。自动rebalance数据。失败隔离:由于Shard是一种shared-nothing技术,每个shard使用独立的硬件,因此一个shard节点出现故障,只会影响到这个shard存放的数据,而不会影响到其他shard。按照地理位置分布数据:可以选择根据地理位置不同,将数据存储在不同的shard。滚动升级:选择不同时间升级不同的shard。比如同一时间只升级一个或一部分shard,那么只有这些升级的shard中存储的数据受到影响,其他的shard不受到影响,可以继续提供服务。云部署:Shard非常适合部署在cloud。OracleSharding组成=================OracleSharding主要包括下面组件:Shardeddatabase(SDB):逻辑上SDB是一个数据库,但是物理上SDB包括多个物理独立的数据库,SDB类似一个数据库池(pool),数据库池(pool)中包括多个数据库(Shard).目前版本最大支持1000个shard。Shards:SDB包括多个物理独立的数据库,每一个数据库都称为shard,每个shard数据库位于不同的服务器,他们不共享CPU,内存,存储等资源。每个shard数据库中保存表的不同数据集,但是每个shard中都有相同的列(columns).Shard数据库可以是Dataguard/ADG,提供高可用性,Shard数据库(单机或者ADG)可以通过GSMdeploy来自动创建,也可以将一个已经通过dbca创建好的数据库add到SDB。Shardcatalog:是一个Oracle数据库,用于集中存储管理SDB配置信息,是SDB的核心。SDB配置变化,比如添加/删除shard,Globalservice等等,都记录在Shardcatalog。如果应用查询多个shard中的数据,那么由Shardcatalog统一协调分配。我们推荐将Shardcatalog配置为dataguard环境,这样可以提供HA高可用。如果Shardcatalog无法访问,那么只会影响一些维护操作和跨shard访问,而不会影响单独的shard操作(通过shardingkey的查询/DML)。Sharddirectors:GlobalDataService(GDS)实现对Sharding的集中部署和管理。GSM是GDS的核心组件。GSM作为Sharddirector.GSM类似于监听器,将客户端对SDB的请求路由到对应的shard。负载均衡客户端的访问。Globalservice:数据库的服务(service),用于访问SDB中的数据管理接口:通过GDSCTL(command-lineutility)接口部署管理监控Sharding。OracleSharding方法================OracleSharding支持3种方法shard/分片方法:System-ManagedSharding:这种方法用户不用指定数据存放在哪个shard中。Sharding通过一致性哈希(CONSISTENTHASH)方法将数据分区(partitioning),并自动分布在不同的Shard。System-managedsharding只能有一个shardspace.CompositeSharding:这种方法用户创建多个shardspaces,每个shardspaces中存放一定范围(range)或者列表(list)的数据。一般情况下,Shardspace按照区域来划分,比如美国区域的shard属于shardspacecust_america,欧洲的shard属于shardspacecust_europe。SubpartitionswithSharding:Sharding基于表分区,因此子分区(Subpartitions)技术同样适用于ShardingOracleSharding对象=================被Shard/分片的表我们成为shardedtable,这些shardedtable的集合称为表家族(TableFamily)。所谓表家族(TableFamily)就是指shardedtable之间是父-子关系,一个表家族(TableFamily)中没有任何父表的表叫做根表(roottable),每个表家族中只能有一个根表。在12.2,在一个SDB中只支持一个表家族。在表家族(TableFamily)中的所有shardedtable都按照相同的shardingkey(主键)来分片,主要是由roottable的shardingkey决定的。表家族(TableFamily)中有相同shardingkey的数据存储在同一个Chunk中,这样方便以后的数据移动。比如:用户表–订单表–订单明细表就是一个表家族,其中用户表是roottable,订单表和订单明细表分别是子表,他们都按照shardingkey(CustNo)分区。具体请参考后面的测试-安装配置systemmanagedsharding用户表:CustNoNameAddressLocationClass------------------------------------------------123Brown100MainStus3Gold456Jones300PineAveus1Silver999Smith453CherryStus2Bronze订单表:OrderNoCustNoOrderDate----------------------------400112314-FEB-2013400245609-MAR-2013400345605-APR-2013400412327-MAY-2013400599901-SEP-2013订单明细表LineNoOrderNoCustNoStockNoQuantity----------------------------------40011400112305683022140012400112345423609440013400112368584904140021400245605683022140022400245645423509340022400345680345330164004140041234542350914004240041236858490424005140059998034533012OracleSharding路由选择(Routing)==========================--直接路由应用程序初始化时,在应用层/中间件层建立连接池,连接池获取所有shard节点的shardingkey范围,并且保存在连接池中,形成shardtopologycache(拓扑缓存),Cache提供了一个快速的方法直接将请求路由到具体的shard。客户端请求时指定shardkey,直接从连接池获取连接,这种情况下不经过sharddirector/catalog数据库,直接连接到对应的shard。--代理路由如果客户端执行select或者DML时不指定shardkey或者执行聚合操作(比如groupby),那么请求发送到Catalog数据库,根据matadata信息,SQL编译器决定访问哪些shards。为了实现sharding,oracle在连接池和驱动方面都做了增强,提供了新的API(UCP,JDBC,OCI等等)在连接创建时来传递shardingkeys.比如:ShardingAPIsforOracleUCPPoolDataSourcepds=PoolDataSourceFactory.getPoolDataSource();//SetConnectionPoolpropertiespds.setURL(DB_URL);pds.setUser(hr);pds.setPassword(****);pds.setInitialPoolSize(10);pds.setMinPoolSize(20);pds.setMaxPoolSize(30);//buildtheshardingkeyobjectOracleShardingKeyshardingKey=pds.createShardingKeyBuilder().subkey(mary.smith@example.com,OracleType.VARCHAR2).build();//GetanUCPconnectionforashardConnectionconn=pds.createConnectionBuilder().shardingKey(shardingKey).build();比如:SQLPLUS连接串中指定shardingkey:$sqlplusapp_schema/oracle@'(description=(address=(protocol=tcp)(host=gsm1)(port=1522))(connect_data=(service_name=oltp_rw_srvc.shdb.oradbcloud)(region=region1)(SHARDING_KEY=james.parker@x-DOT-bogus)))'安装配置systemmanagedsharding(shard节点为单机)==================================================系统环境概述--------------这是一个测试环境,因此shard均为单机数据库,没有配置ADG.生产环境下,建议配置为ADG,提供高可用性。主机名角色系统配置gsm1-GSM/shardDirector和Shardcatalog都安装在gsm1服务器。4GB内存,1颗CPU,30GBssd磁盘sd1-shard服务器1。4GB内存,1颗CPU,30GBssd磁盘sd2-shard服务器2。4GB内存,1颗CPU,30GBssd磁盘安装12.2RDBMS软件-------------------在所有服务器安装12.2ORACLERDBMS软件,包括Shardcatalog服务器和所有shard服务器。只安装软件,不用dbca创建数据库。安装GDS/GSM软件-------------------在shardDirector服务器gsm1安装12.2GDS/GSM软件。GSM安装过程比较简单,按照默认配置安装即可。创建ShardCatalogdatabase----------------------------在Shardcatalog服务器gsm1创建non-c
本文标题:Oracle 数据库 12c新特性-Oracle Sharding简介
链接地址:https://www.777doc.com/doc-3605856 .html