热门标签 | 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";
推荐阅读
  • 大数据SQL优化:全面解析数据倾斜解决方案
    本文深入探讨了大数据SQL优化中的数据倾斜问题,提供了多种解决策略和实际案例,旨在帮助读者理解和应对这一常见挑战。 ... [详细]
  • 远程访问用户 Kindle通过电子书实现控制
    介绍自2007年以来,亚马逊已售出数千万台Kindle,令人印象深刻。但这也意味着数以千万计的人可能会因为这些Kindle中的软件漏洞而被黑客入侵。他 ... [详细]
  • 从零开始学重构——重构的流程及基础重构手法
    重构的流程重构手法  正如上一次所讲的那样,重构有两个基本条件,一是要保持代码在重构前后的行为基本不变,二是整个过程是受控且尽可能少地产生错误。尤其是对于第二点,产生了一系列的重构手 ... [详细]
  • ANSI最全介绍linux终端字体改变颜色等ANSI转义序列维基百科,自由的百科全书由于国内不能访问wiki而且国内关于ANSI的介绍都是简短的不能达到,不够完整所以转wiki到此 ... [详细]
  • 本文探讨了Thrift作为一款支持多语言的服务开发框架,其在体积、功能、扩展性以及多协议支持等方面的显著优势。特别地,Thrift作为一种RPC(远程过程调用协议)框架,非常适合用于构建可扩展且低耦合的分布式服务系统。文章通过多种编程语言对Thrift服务进行了性能测试,并提供了详细的测试结果。 ... [详细]
  • 通过学习《Think Python》,我对Python编程有了初步了解,但在使用第三方库方面仍感到陌生。近期因百度空间即将关闭,我打算利用Evi1m0提供的Python爬虫代码备份个人网站,过程中遇到了第三方库安装的问题。 ... [详细]
  • 运用DDD分层架构优化微服务代码设计
    在微服务实施过程中,确定合理的代码结构至关重要。本文探讨了如何利用领域驱动设计(DDD)的分层架构来优化微服务的代码模型,确保系统的可维护性和扩展性。 ... [详细]
  • 本文详细介绍了快速排序算法的工作原理和实现步骤,包括选择基准值、分区过程以及递归调用等关键环节。通过具体的Java代码示例,帮助读者更好地理解和掌握这一高效的排序算法。 ... [详细]
  • 本文总结了几个常用的Android开发技巧,包括检测设备上是否安装特定应用、获取应用的版本名称、设置状态栏透明以及如何从一个应用跳转至另一个应用的方法。 ... [详细]
  • 本文详细介绍了MySQL表分区的概念、类型及其在实际应用中的实施方法,特别是针对Zabbix数据库的优化策略。 ... [详细]
  • En-Tan-Mo再次引领创新潮流,推出全新'大众奖励计划'。作为区块链领域的先锋,En-Tan-Mo继交易所上线、发布技术白皮书及共识之夜活动后,再次展现其团队的卓越与活力。本文将详细介绍该计划的具体内容及其对参与者的重要意义。 ... [详细]
  • 本文介绍如何使用Java实现AC自动机(Aho-Corasick算法),以实现高效的多模式字符串匹配。文章涵盖了Trie树和KMP算法的基础知识,并提供了一个详细的代码示例,包括构建Trie树、设置失败指针以及执行搜索的过程。 ... [详细]
  • 本文通过个人经历引出关于数学教学中的一个常见误解——被零除的结果,并深入探讨了浮点数中负零的存在及其背后的数学原理。 ... [详细]
  • 本文详细解析了LeetCode第300题——最长递增子序列的解题方法,特别是如何使用动态规划来高效解决问题。文章不仅提供了详细的代码实现,还探讨了常见的错误理解和正确的解题思路。 ... [详细]
  • 第三周课堂测试1、使用汇编语言编写指令时,用一些简单的容易记忆的符号来代替二进制指令,比机器语言更为方便,属于高级语言。(B ... [详细]
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社区 版权所有