数据库

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

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

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

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

       

        前段时间,看了罗女士( 资深技术顾问 - 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. 柯南君 :Oracle 分区技术 之 如何支撑大数据操作?

  • 打酱油

  • 震惊

  • 呵呵


  • 鄙视
标签标签:PHP ,CSS数据库 ,优化
立即登录 | 注册新用户
最新评论
  • 不吐不快,赶紧来一发!
栏目推荐
  • 浅谈:架构师眼中的MySQL开发模式
  • 思考mysql内核之初级系列5---information_schema不是innodb数据字典
  • MySQL数据库存储引擎详解
  • 运行多个MYSQL服务器
  • mysql内核之初级系列3-办理业务的流程
  • MySQL 句柄数占用过多的解决方法
  • mysql中utf8编码的utf8_bin,utf8_general_cs,utf8_bin的区别
  • MySql的count(*)统计结果很慢?为什么
  • mysql中,主键与普通索引的区别是什么?
  • 详解:mysql MyISAM InnoDB 两者之间的区别
关注 第一PHP社区 微信公众号
热门点击
  • 新闻APP后端系统架构成长之路 - 高可用架构设计
  • PHP基础: CLI模式开发不需要任何一种Web服务器
  • 基础教程:svn命令在linux下的使用
  • 亿级Web系统搭建——单机到分布式集群
  • HTTP简介,http是一个属于应用层的面向对象的协议
  • Serverless技术架构,传说中的FAAS(Function as a Service),极简运维,无限扩容
  • PHP漏洞全解(六)跨网站请求伪造
  • php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
  • PHP学习路线以及10个PHP优化技巧
  • 适用于PHP初学者的学习线路和建议
本站推荐
  • 2016PHP技术盛会:如何编写可测试的代码
  • MySQL改密码报错:ERROR 1045: Access denied for user: 'root@localhost' (Using password: YES)
  • phpmyadmin导入导出数据库文件最大限制的解决方法
  • Linux环境下MySQL数据库大小写区分问题
  • php 5.4中php-fpm 的重启、终止操作命令
  • Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用
  • Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作
  • Key/Value之王Memcached初探:一、掀起Memcached的盖头来
  • NoSQL初探之人人都爱Redis:(4)Redis主从复制架构初步探索
  • NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例
分享到:
模拟ORA-26040: Data block was loaded u...
模拟ORA-26040: Data block was loaded using the NOLOGGING option我们知道通过设置nologging选项,可以加快oracle的某些操作的执行速度,这在执行某些维护任务时是非常有用的,但是该选项也很危险,如果使用不当,就可能导致数据库发生ORA-26040错误。 首先,构造使用环境, SQL> select tablespace_name,logging,force_...
IT忍者神龟之Hibernat持久化对象-数据表...
IT忍者神龟之Hibernat持久化对象-数据表映射配置回顾 1.持久化对象POJO编写规则: 1) 有空参public构造器; 2) 提供标识属性,映射数据表主键; 3) 属性提供setter和getter方法; 4) 属性使用基本数据类型的包装类型。基本类型在数据库中不能区分null和0; 5) 不使用final修饰。如果使用final则无法生成代...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……