Oracle 从分区到Sharding(数据库核心业务表的分区设计)

1.分区与Sharding

2.分区概述
(1)  分区 定义:
     根据内部定义的规则,将一张表的数据拆分到多个数据段中
        对应用透明,程序可以不做任何额外调整
     可以通过分区列上的条件访问指定分区的数据,也可以通过分区扩展语句显式的访问
(2) 分区的优点
     可维护性
     可用性增强
     OLTP:降低共享资源争用
     OLAP:提升查询性能
(3) Oracle 分区历史演变


3.分区设计
(1) 范围分区:
    ① 适用场景
        时间属性
        关注近期数据
    ②  最佳实践
        数据生命周期和访问范围
        明确时间条件限定
        定期清理过期分区
        非主键优先本地索引
    ③ 优势
        将表分割成大小相对一致的分区,分区数据量可控
        TRUNCATE,DROP,EXCHANGE分区的方式清理过期数据
        大部分带时间条件的查询只访问一个或几个分区
        表的总体大小相对稳定
        本地索引大小相对稳定
    ④ 面临挑战1
         无法仅根据时间条件清理过期数据
        DELETE方式清除效率低下并产生大量归档日志
        DELETE方式清除无法有效释放分区和索引空
        长时间不清理导致表的数据量迅速膨胀
        长时间不清理导致表的分区数量不断增长
    ⑤ 解决方案1
        INSERT + EXCHANGE方式进行数据清理
        定期MERGE清理过的分区减少分区数量
        避免DELETE效率低下问题
        避免空间无法释放问题
    ⑥  解决方案1
         INSERT + EXCHANGE方式进行数据清理
          定期MERGE清理过的分区减少分区数量
         避免DELETE效率低下问题
         避免空间无法释放问题
    ⑦  面临挑战2
         主表分区时间列在子表上不存在
        主表时间列和子表时间列字段含义不同
        数据清理过程会破坏主子表依赖关系
        子表需要冗余主表分区字段
        主子表外键约束导致无法通过DDL清理过期分区
    ⑧ 解决方案2
        主表根据时间字段范围分区
        子表通过外键建立参考分区
        参考分区的数据清理不破坏主外键依赖关系

(2) 参考分区
     适用场景
          主表和子表采用相同的数据清理策略
          子表没有合适的分区字段
          主表和子表经常关联访问

(3) 哈希分区:
    ① 适用场景
        没有时间属性
        缺少区分数据的业务字段
    ② 最佳实践
分区键值列选择重复度不高的字段
分区数量应为2的幂
多创建全局索引
哈希分区索引可解决索引热点块问题
    ③ 优势
分区没有业务特点的数据
数据均匀分布
        有效解决递增索引的热点块问题
    ④  哈希全局分区索引
         全局哈希分区索引比较适合像ID这种数据增长型索引,通过HASH算法,可以将递增的索引键值分布到多个分区上,从而避免系统争用。

(4) 列表分区
    ① 适用场景
        地域,类型等有限的业务属性
        访问一种或几种业务属性
        通过业务属性可平均拆分数据
    ② 最佳实践
        地区字段是常见候选
        数据分布和访问方式确定分区键值划分
        设定DEF AUL分区
    ③ 优势
       分区方式和业务匹配度更好
       数据如何在分区中存放的选择度更高
       分区键值与分区的对应更加明确

(5)  复合键值列RANGE分区

(6)  RANGE-RANGE复合分区

5. 12.2分区新特性


    具体内容请参考-【2015 OTN】杨廷琨 - 从分区到Sharding:数据库核心业务表的分区设计: http://download.csdn.net/download/luomingkui1109/10005580

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员学习圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值