Oracle 从分区到Sharding(数据库核心业务表的分区设计)
来源:互联网 发布:新浪网络运营文员岗 编辑:程序博客网 时间:2024/06/09 19:58
1.分区与Sharding
请参考上篇文章:http://blog.csdn.net/luomingkui1109/article/details/78149009
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 0
- Oracle 从分区到Sharding(数据库核心业务表的分区设计)
- Sharding与数据库分区(Partition)的区别
- Sharding与数据库分区(Partition)的区别
- Sharding与数据库分区(Partition)的区别
- MySql从一窍不通到入门(五)Sharding:分表、分库、分片和分区
- oracle数据库表分区
- ORACLE数据库表分区
- Oracle数据库表分区
- oracle数据库表分区
- Oracle 11g表分区与索引分区(《Oracle从入门到精通》读书笔记4)
- 数据库分片(Sharding)与分区(Partition)的区别(转)
- 数据库分片(Sharding)与分区(Partition)的区别
- 数据库分片(Sharding)与分区(Partition)的区别
- 数据库分片(Sharding)与分区(Partition)的区别
- 数据库分片(Sharding)与分区(Partition)的区别
- Oracle 数据库表分区的策略
- oracle的表分区
- Oracle数据库表分区介绍
- devops [持续交付实践] 基于 sonarqube 的代码检查平台实现
- java RMI原理详解
- 用openCV去除文字中乱入的线条
- 动态代理
- 深度学习中激活函数的选择
- Oracle 从分区到Sharding(数据库核心业务表的分区设计)
- ubuntu网络掉线问题(转载)
- 深入研究java.lang.ThreadLocal类 -- JAVA 进阶
- caffe学习笔记之Caffe for Windows 训练cifar10
- 【分析】RBD Mirroring
- PAT 甲级 1062. Talent and Virtue (25)
- 数据库系统设计
- 洛谷1136 迎接仪式
- C语言 java 变参的使用