热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

柯南君:Oracle分区技术之如何支撑大数据操作?

前段时间,看了罗女士(资深技术顾问-Oracle中国顾问咨询部)关于《大批量数据处理技术的演讲》视频,感觉受益良多,结合多年的知识积累,柯南君给大家分享一下:交流内容:一、Oracle的分区技术(一)分区技术内容1.什么是分区?

       

        前段时间,看了罗女士( 资深技术顾问 - Oracle 中国 顾问咨询部)关于《大批量数据处理技术的演讲》视频,感觉受益良多,结合多年的知识积累,柯南君给大家分享一下:

      交流内容:     

      一、Oracle的分区技术

         (一)分区技术内容

            1. 什么是分区?

              分区就是将一个非常大的table或者index 按照某一列的值,分解为更小的,易于管理的逻辑片段---分区。将表或者索引分区不会影响SQL语句以及DML(见备注语句,就和使用非分区表一样,每个分区拥有自己的segment(见备注,因为,DDL(见备注能够将比较大的任务分解为更小的颗粒。分区表只有定义信息,只有每个存放数据的分区才有各自的segment。就好象拥有多个相同列名,列类型的一个大的视图。

  •  大数据对象(表,索引)被分成小物理段;
  •  当分区表建立时,记录基于分区字段值被存储到相应的分区;
  •  分区字段值可以修改(row movement enable);
  •  分区可以存储在不同的表空间;
  •  分区可以有不同的物理存储参数;
  •  分区可以支持IOT表,对象表,LOB字段,varrays等;
             备注:

                    ①  DML(data manipulation language): 
                          它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言;
                          

                     ② segment(data manipulation language): 

                           段(segment)是一种在数据库中消耗物理存储空间的任何实体(一个段可能存在于多个数据文件中,因为物理的数据文件
 是组成逻辑表空间的基本物理存储单位)

             2.分区的好处?

  • 性能
              - Select 和 DML操作只访问指定分区

              - 并行DML操作

              - Patition - wise Join

  • 可管理性:数据删除,数据备份
             - 历史数据清除

             - 提高备份性能

             - 指定分区的数据维护操作

  • 可用性
              - 将故障局限在分区中

              - 缩短恢复时间

  • 分区目标优先级
             - 高性能->数据维护能力->实施难度->高可用性(故障屏蔽能力)   

               ③  如何实施分区?

         

  A .  Range Partitioning(范围分区)

     【案例分析】:

           就是根据数据库表中某一字段的值的范围来划分分区,例如:

   Sql代码  收藏代码
  1. create table graderecord  
  2.   (  
  3.   sno varchar2(10),  
  4.   sname varchar2(20),  
  5.   dormitory varchar2(3),  
  6.   grade int  
  7. )  
  8. partition by range(grade)  
  9. (  
  10.   partition bujige values less than(60),      --不及格  
  11.   partition jige values less than(85),        --及格  
  12.   partition youxiu values less than(maxvalue) --优秀  
  13. )  

    备注:

         ① 分区字段:grade

         ② values less than 必须是确定值

     ③ 每个分区可以单独指定物理属性 例如:partition bujige values less than(60) tablespace data0

         ④ 说明:数据中有空值,Oracle机制会自动将其规划到maxvalue的分区中。

    

    1)插入实验数据:

Sql代码  收藏代码
  1. insert into graderecord values('511601','魁','229',92);  
  2. insert into graderecord values('511602','凯','229',62);  
  3. insert into graderecord values('511603','东','229',26);  
  4. insert into graderecord values('511604','亮','228',77);  
  5. insert into graderecord values('511605','敬','228',47);  
  6. insert into graderecord(sno,sname,dormitory) values('511606','峰','228');  
  7. insert into graderecord values('511607','明','240',90);  
  8. insert into graderecord values('511608','楠','240',100);  
  9. insert into graderecord values('511609','涛','240',67);  
  10. insert into graderecord values('511610','博','240',75);  
  11. insert into graderecord values('511611','铮','240',60);  

   2)下面查询一下全部数据,然后查询各个分区数据,代码一起写:

Java代码  收藏代码
  1. select * from graderecord;  
  2. select * from graderecord partition(bujige);  
  3. select * from graderecord partition(jige);  
  4. select * from graderecord partition(youxiu);  

   全部数据如下:

   

 

   不及格数据如下:

   

 

  及格数据如下:

    

 

    优秀数据如下:

    

    【范围分区特点】:

      ① 最早、最经典的分区算法
      ② Range分区通过对分区字段值的范围进行分区
     ③ Range分区特别适合于按时间周期进行数据的存储。日、周、月、年等。
     ④ 数据管理能力强
     ⑤ 数据迁移
    ⑥ 数据备份
    ⑦ 数据交换
    ⑧ 范围分区的数据可能不均匀
    ⑨ 范围分区与记录值相关,实施难度和可维护性相对较差

B.hash (散列分区)

       【案例分析】:
        散列分区是根据字段的hash值进行均匀分布,尽可能的实现各分区所散列的数据相等。

还是刚才那个表,只不过把范围分区改换为散列分区,语法如下(删除表之后重建):

Sql代码  收藏代码
  1. create table graderecord  
  2. (  
  3.   sno varchar2(10),  
  4.   sname varchar2(20),  
  5.   dormitory varchar2(3),  
  6.   grade int  
  7. )  
  8. partition by hash(sno)  
  9. (  
  10.   partition p1,  
  11.   partition p2,  
  12.   partition p3  
  13. );  

 

  备注:

      ① 说明:散列分区即为哈希分区,Oracle采用哈希码技术分区,具体分区如何由Oracle说的算,也可能我下一次搜索就不是这个数据了。

  

  1)    插入实验数据,与范围分区实验插入的数据相同。

     然后查询分区数据:

Sql代码  收藏代码
  1. select * from graderecord partition(p1);  
  2. select * from graderecord partition(p2);  
  3. select * from graderecord partition(p3);  

   p1分区的数据:

   

 

   p2分区的数据:

   

 

  p3分区的数据:

  

   【HASH分区特点】:

  ?基于分区字段的HASH值,自动将记录插入到指定分区。
  ?分区数一般是2的幂
  ?易于实施
 ?总体性能最佳
 ?适合于静态数据
 ?HASH分区适合于数据的均匀存储
 ?HASH分区特别适合于PDML和partition-wise joins。
 ?支持 (hash) local indexes
 ?9i不支持 (hash)global indexes
 ?10g 支持(hash)global indexes HASH分区
 ?数据管理能力弱
 ?HASH分区对数据值无法控制

c.列表分区

     【案例分析】:

     列表分区明确指定了根据某字段的某个具体值进行分区,而不是像范围分区那样根据字段的值范围来划分的。

Sql代码  收藏代码
  1. create table graderecord  
  2. (  
  3.   sno varchar2(10),  
  4.   sname varchar2(20),  
  5.   dormitory varchar2(3),  
  6.   grade int  
  7. )  
  8. partition by list(dormitory)  
  9. (  
  10.   partition d229 values('229'),  
  11.   partition d228 values('228'),  
  12.   partition d240 values('240')  
  13. )  

 以上根据宿舍来进行列表分区,插入与范围分区实验相同的数据,做查询如下:

Sql代码  收藏代码
  1. select * from graderecord partition(d229);  
  2. select * from graderecord partition(d228);  
  3. select * from graderecord partition(d240);  

 d229分区所得数据如下:

  

 

d228分区所得数据如下:

  

 

d240分区所得数据如下:

  

列表分区特点】:

?List分区通过对分区字段的离散值进行分区。
?List分区是不排序的,而且分区之间没有关联关系
?List分区适合于对数据离散值进行控制。
?List分区只支持单个字段。
?List分区具有与范围分区相似的优缺点
–数据管理能力强
–List分区的数据可能不均匀
–List分区与记录值相关,实施难度和可维护性相对较差

d.组合分区(范围-散列分区,范围-列表分区)
      【案例分析】:

       首先讲范围-散列分区。先声明一下:列表分区不支持多列,但是范围分区和哈希分区支持多列。

      代码如下:

Sql代码  收藏代码
  1. var cpro_id = "u6885494";
推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • Søren Kierkegaard famously stated that life can only be understood in retrospect but must be lived moving forward. This perspective delves into the intricate relationship between our lived experiences and our reflections on them. ... [详细]
  • 计算机网络复习:第五章 网络层控制平面
    本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 线性Kalman滤波器在多自由度车辆悬架主动控制中的应用研究
    本文探讨了线性Kalman滤波器(LKF)在不同自由度(2、4、7)的车辆悬架系统中进行主动控制的应用。通过详细的仿真分析,展示了LKF在提升悬架性能方面的潜力,并总结了调参过程中的关键要点。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
author-avatar
张小虎要努力
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有