暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle(4) Sharding

南山笔记 2021-05-13
2011

Oracle ShardingOracle 12.2版本推出的新功能也称为数据分片适用于online transaction processing (OLTP)。该方案基于表分区技术,数据水平分区存储到不同的数据库每个数据库位于不同的服务器,这里每一个数据库都称为shard 这些shard组成一个逻辑数据库称为sharded database (SDB) 这个table也称为sharded table 每个shard数据库中保存该表的不同数据集(按照sharding key分区)

以下是Shared table的示意,该部署方案分布包括3个数据库节点:

Oracle Sharding有以下优点:

1、线性扩展,Shard是一种shared-nothing技术,每个shard数据库使用独立的服务器硬件(CPU,内存等),可通过扩展服务器的方式进行扩展;

2、故障控制,同样是因为shared-nothing,可消除单点故障,单点故障不会影响其它节点性能和可用性;

3、滚动升级;

4、适合云部署。


Oracle Sharing的架构:

1Shared database(SDB),逻辑上SDB是一个数据库,但是物理上SDB包括多个物理独立的数据库,SDB类似一个数据库池(pool),数据库池(pool)中包括多个数据库

2ShardSDB中每一个数据库都称为shard, 每个shard数据库位于不同的服务器,他们不共享CPU,内存,存储等资源

3、Shard catalog,也是一个Oracle数据库,用于集中存储管理SDB配置信息,是SDB的核心。SDB配置变化,比如添加/删除shard,Global service等等,都记录在Shard catalog。查询需要访问多个shard中的数据,则该查询由Shard catalog统一协调分配。

4、Shard directors,Oracle Sharding环境中的GSM服务,称之为Shard DirectorGSM类似于监听器,将客户端对SDB的请求路由到对应的shard。负载均衡客户端的访问。

5、连接池,支持ocijdbc的连接池访问机制。

6、管理接口GDSCTL,可以基于GDSCTL进行sharded database的发布、管理和监控等。


SDB数据库支持的表类型:

1Sharded Tables,以表或表组的形式存在,适合于进行分区管理的数据表,按照指定分区列,将数据分布到SDB的各节点。如下创建:

    CREATE SHARDED TABLE Customers
    ( CustNo NUMBER NOT NULL
    , Name VARCHAR2(50)
    , Address VARCHAR2(250)
    , CONSTRAINT RootPK PRIMARY KEY(CustNo)
    )
    PARTITION BY CONSISTENT HASH (CustNo)
    PARTITIONS AUTO
    TABLESPACE SET ts1;
    CREATE SHARDED TABLE Orders
    ( OrderNo NUMBER NOT NULL
    , CustNo NUMBER NOT NULL
    , OrderDate DATE
    , CONSTRAINT OrderPK PRIMARY KEY (CustNo, OrderNo)
    , CONSTRAINT CustFK FOREIGN KEY (CustNo) REFERENCES Customers(CustNo)
    )
    PARTITION BY REFERENCE (CustFK);

    Shardedtable通过分区键,将数据分布到SDB的个节点,实现线性扩展的目标。这一点与MPP数据库的表分布机制类似。在查询时,通过将查询任务分布到多个节点,并行执行查询任务提升查询效率。

     2、DuplicatedTables,适合小数据量表,该模型在SDB的每个节点上存储一份完整数据。

      CREATE DUPLICATED TABLE Products
      ( StockNo NUMBER PRIMARY KEY
      , DescriptionVARCHAR2(20)
      ,Price NUMBER(6,2));

      表分布和CHUNK的引入:

      Oracle Sharding在执行CREATE SHARDED TABLE语句时自动将分区分布到shard中,分区的分布对应用程序是透明的。图显示了分片表的逻辑视图及其物理实现

      CHUNK的引入:

      为减少多shard连接的数量,一个表族中所有表的对应分区总是存储在同一个shard中。当表族中的表是在同一组分布式表空间中创建的,可以保证对应分区在同一个shard中。

      但是,当从不同表空间集中的表族创建不同的表时,例如表空间集ts1中的Customers表和表空间集ts2中的Orders表。在这种情况下,必须保证存储客户分区1的表空间始终与存储订单分区1的表空间位于同一个shard中。为了支持此功能,将形成一组表族中所有表的相应分区,称为块。块包含表族中每个表的单个分区。下图显示了一个包含来自客户订单行项目模式表的相应分区的块:

      小结:

      Oracle Shard技术的引入,在保留了Oracle数据库管理系统的传统的优势的同时,让oracle数据库不再受限于RAC技术的限制,具备了类似MPP数据库的水平扩展和并行计算的能力,具备了更多的可能性。


      参考文档:

      https://docs.oracle.com/en/database/oracle/oracle-database/19/shard/sharding-overview.html


      No.26。

      文章转载自南山笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论