一. Oracle的OLTP和OLAP模式

       Oracle属于传统的关系型数据库,在建库应用时,大致可以分为OLTP和OLAP两种模式,针对这两种不同模式,Oracle都有的不同的技术应用和优化技巧。先简单介绍这一下这两种模式:

      OLTP(on-line transaction processing):联机事务处理,属于高可用的在线系统,注重事务,高响应,高并发(多人同时使用)。操作语句,尽量以最简单的增删查改为主,避免复杂SQL。这个模式是Oracle数据库也是传统关系型数据库的主要应用模式。OLTP模式的应用场景,在日常中很常见:比如在线订票,银行交易,电子商务等等。

     OLAP(On-Line Analytical Processing):联机分析处理,用于做复杂的SQL关联和数据分析,向高层展示汇总数据(也就是各种报表),最终用于支撑决策。也类似与平常说的数据仓库。Oracle的OLAP模式在以前应用更多一些,但是通过最近几年大数据的热潮,Oracle的这个模式逐渐会被淘汰掉,更多会使用大数据系列工具(Hadoop系列)。原因也很简单:一是对于PB级别的数据,Oracle的OLAP模式几乎毫无应对之法,单机处理性能始终有限,而Hadoop系列采用分布式存储,分布式处理,能横向扩展对于TB和PB级别的数据量都能有良好的处理性能。 二是Hadoop系列开源,免费,强一点的公司还可以自己做定制化,而Oracle不开源,维护费用昂贵。当然,Oracle的OLAP模式现在还没有被淘汰,毕竟Hadoop的稳定性还在日趋完善,产品的替换也是需要很多人力,财力的投入。

    了解这两种模式的基本概念和主要用处之后,就可以去了解一下Oracle在这两种模式下面的一些应用技巧:

     对于OLTP模式,

     1. 在设计表结构时,需要严格遵守数据库的三范式规则。数据库的三范式简单讲就是:1.表的每一列具有原子性。2.表的其他列必须和主键是完全依赖,不能是部分依赖。3.表的其他列必须和主键是直接关系,不能是间接关系。其实设计表的时候,在满足业务需求的情况下,主要考虑一下:你的表中一列能不能拆分成两列?需不需要拆分成两列?每一行数据的唯一标识/主键?数据冗余情况(比如说:用户名,产品名等等所有你需要保存的数据。能不能让他们在整个数据库里面只保存一次)?当然,大部分工作时候,只需要按照前人的设计模式来就行了。

     2. Cache技术在所有的高响应系统中都是很常见,Web cache与Oracle data buffer,都有应用模板,用的时候按照需求改一改就行了。

     3. B-tree索引技术,其实就是Oracle常用的全局索引/本地索引,对应SQL语句就是 Create Index XXXX,具体Oracle的内部实现原理就要参考数据结构了。(采用的二叉平衡树,所有叶子节点具有相同的深度,因此查询速度和数据分布以及查询条件之间没啥关系)

     4. 分区交换(exchange partition),简单点说,就是把一张表中的历史数据(比如一年前的),迁移到另外一张历史表里面去。我们当然可以手动insert into 然后delete from,但是这样做,速度慢并且影响到索引,并且数据量大的话,会对高响应系统造成延迟。因此可以用Oracle提供的分区交换 exchange partition 语句。它可以实现数据快速转移,所以在数据加载提速,历史数据清理等方面特别有用。分区交换技术实际上只修改了数据字典中的数据物理段位置,而不是实际的移动数据,所以速度很快。用法也很简单: alter table Table_A exchange partition p1 with table Table_A_tmp; 在实际使用的时候,因为OLTP严格遵守数据库三范式,所以需要注意主外键关联。

     对于OLAP模式:

     1. OLAP主要用于复杂的SQL关联和数据计算汇总,最终目的是在最短时间内提供高可用的报表以供市场部门支撑决策。所以数据仓库模型的建立非常重要,主要用的技术有分区技术,并行技术。当然还有很多数据处理,汇总的小技巧,之后的博客文章会慢慢写。同时对于之前提到的OLTP中的技术,在OLAP中没有多大的用处,同样的OLAP中的技术在OLTP模式中也是效果不大。

     2. 分区技术,OLAP中主要使用时间范围分区或者以时间范围分区为基础的复合分区。因为数据都是具有时效性的,时间属性在数据分析中有着极其重要的地位。而OLTP基本不建议使用时间范围分区和复合分区,最多可以使用列表分区。使用起来的话,也是非常的简单,在建表的时候 CREATE TABLE XXXX PARTITION BY RANGE ( partition P_1 value less than 1212)

    3. 并行技术,这里的并行技术是指,将一个复杂关联,数据量庞大的计算汇总SQL拆分成多个进程,从而达到并行。应用的话,也是很简单,直接使用/* parallel(talbe_A,4)*/,这样在计算table_A表里面的数据时,Oracle会自动拆分成四个进程,同时计算。

    4. 数据仓库,这个后面有时间可以专门做一些介绍。

    下面我解释一下为什么说:之前提到的OLTP中的技术,在OLAP中没有多大的用处,同样的OLAP中的技术在OLTP模式中也是效果不大。

    1.  对于数据库三范式,OLAP目的是最短时间内提供高可用的数据,如何从数据库最快取数据?那就是我要的数据都在一张表里面,我用一个最简单的select * from table_a 就能拿到。所以OLAP是允许数据冗余,不需要严格遵守数据库三范式。

    2.  对于Cache技术,OLAP模式基本上要对采集过来的所有数据做一次数据计算汇总然后保存。注意,所有的数据都需要遍历一次。这个时候Cache技术的什么命中率效果可以忽略了,倒是高容量的内存更好用一些。

    3. 对于B-tree索引技术,因为OLAP大多是分区表,全局索引基本不用,本地索引在大量数据插入的时候,维护代价太大。(OLAP用于数据分析,每天会采集大量数据入库,计算汇总)一般情况下是不推荐使用的,除非是独特的业务场景。补充一个位图索引,当数据表中某一列的取值范围固定的时候(比如性别这一列,只能填充:男,女),OLAP模式可以尝试使用位图索引。不过对于OLAP模式来讲,也不是很重要。因为OLAP分析通常不是实时/准实时的,假如用位图索引能将SQL从10分钟优化到5分钟。对于非实时系统分析而言5分钟显得不是那么的关键。不过可以作为小的优化项目。用法: create bitmap index XXXX

     4. 分区交换,在条件允许的情况下,OLAP需要尽可能保留历史数据用于分析,不需要使用分区交换。

     5. 分区技术,OLTP基本不建议任何类型的分区,最多可以使用列表分区。为什么?OLTP是尽量以最简单的增删查改为主,避免复杂SQL。建立分区的话,需要将分区关键字作为 where 搜索条件之一,不然的话,还是要搜索全部分区。所以对于Web开发者而言,索引明显更加好用。

    6.  并行技术,在OLTP里面应该要禁止使用这种 /* parallel(talbe_A,2) */ 。为什么?上面介绍 并行技术是指,将一个复杂计算汇总的SQL拆分成多个进程,从而达到并行。OLTP是以最简单的增删查改为主,这个时候Oracle的拆分耗时,都会大于简单查询耗时,得不偿失。并且在OLTP的高并发(多人同时使用)的情况下,再使用并行 /* parallel(talbe_A,2) */,相当直接double了一下访问峰值。

   

    上面,浅显的介绍了一些通用的技术和应用场景,最后还是要说,实际工作中,在保证系统允许稳定并且钱给够的情况下:需求>一切。对,谁让甲方是father呢。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值