OLAP、OLTP的介绍和比较

OLTP与OLAP的介绍

    数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。 

OLTP 系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;
OLAP 系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。 

OLTP与OLAP之间的比较:   

    OLTP,也叫联机事务处理(Online Transaction Processing),表示事务性非常高的系统,一般都是高可用的在线系统,以小的事务以及小的查询为主,评估其系统的时候,一般看其每秒执行的Transaction以及Execute SQL的数量。在这样的系统中,单个数据库每秒处理的Transaction往往超过几百个,或者是几千个,Select 语句的执行量每秒几千甚至几万个。典型的OLTP系统有电子商务系统、银行、证券等,如美国eBay的业务数据库,就是很典型的OLTP数据库。
OLTP系统最容易出现瓶颈的地方就是CPU与磁盘子系统。
(1)CPU出现瓶颈常表现在逻辑读总量与计算性函数或者是过程上,逻辑读总量等于单个语句的逻辑读乘以执行次数,如果单个语句执行速度虽然很快,但是执行次数非常多,那么,也可能会导致很大的逻辑读总量。设计的方法与优化的方法就是减少单个语句的逻辑读,或者是减少它们的执行次数。另外,一些计算型的函数,如自定义函数、decode等的频繁使用,也会消耗大量的CPU时间,造成系统的负载升高,正确的设计方法或者是优化方法,需要尽量避免计算过程,如保存计算结果到统计表就是一个好的方法。
(2)磁盘子系统在OLTP环境中,它的承载能力一般取决于它的IOPS处理能力. 因为在OLTP环境中,磁盘物理读一般都是db file sequential read,也就是单块读,但是这个读的次数非常频繁。如果频繁到磁盘子系统都不能承载其IOPS的时候,就会出现大的性能问题。
    OLTP比较常用的设计与优化方式为Cache技术与B-tree索引技术,Cache决定了很多语句不需要从磁盘子系统获得数据,所以,Web cache与Oracle data buffer对OLTP系统是很重要的。另外,在索引使用方面,语句越简单越好,这样执行计划也稳定,而且一定要使用绑定变量,减少语句解析,尽量减少表关联,尽量减少分布式事务,基本不使用分区技术、MV技术、并行技术及位图索引。因为并发量很高,批量更新时要分批快速提交,以避免阻塞的发生。 
OLTP 系统是一个数据块变化非常频繁,SQL 语句提交非常频繁的系统。 对于数据块来说,应尽可能让数据块保存在内存当中,对于SQL来说,尽可能使用变量绑定技术来达到SQL重用,减少物理I/O 和重复的SQL 解析,从而极大的改善数据库的性能。
    这里影响性能除了绑定变量,还有可能是热快(hot block)。 当一个块被多个用户同时读取时,Oracle 为了维护数据的一致性,需要使用Latch来串行化用户的操作。当一个用户获得了latch后,其他用户就只能等待,获取这个数据块的用户越多,等待就越明显。 这就是热快的问题。 这种热快可能是数据块,也可能是回滚端块。 对于数据块来讲,通常是数据库的数据分布不均匀导致,如果是索引的数据块,可以考虑创建反向索引来达到重新分布数据的目的,对于回滚段数据块,可以适当多增加几个回滚段来避免这种争用。 
    OLAP,也叫联机分析处理(Online Analytical Processing)系统,有的时候也叫DSS决策支持系统,就是我们说的数据仓库。在这样的系统中,语句的执行量不是考核标准,因为一条语句的执行时间可能会非常长,读取的数据也非常多。所以,在这样的系统中,考核的标准往往是磁盘子系统的吞吐量(带宽),如能达到多少MB/s的流量。
    磁盘子系统的吞吐量则往往取决于磁盘的个数,这个时候,Cache基本是没有效果的,数据库的读写类型基本上是db file scattered read与direct path read/write。应尽量采用个数比较多的磁盘以及比较大的带宽,如4Gb的光纤接口。
在OLAP系统中,常使用分区技术、并行技术。
    分区技术在OLAP系统中的重要性主要体现在数据库管理上,比如数据库加载,可以通过分区交换的方式实现,备份可以通过备份分区表空间实现,删除数据可以通过分区进行删除,至于分区在性能上的影响,它可以使得一些大表的扫描变得很快(只扫描单个分区)。另外,如果分区结合并行的话,也可以使得整个表的扫描会变得很快。总之,分区主要的功能是管理上的方便性,它并不能绝对保证查询性能的提高,有时候分区会带来性能上的提高,有时候会降低。
    并行技术除了与分区技术结合外,在Oracle 10g中,与RAC结合实现多节点的同时扫描,效果也非常不错,可把一个任务,如select的全表扫描,平均地分派到多个RAC的节点上去。
    在OLAP系统中,不需要使用绑定(BIND)变量,因为整个系统的执行量很小,分析时间对于执行时间来说,可以忽略,而且可避免出现错误的执行计划。但是OLAP中可以大量使用位图索引,物化视图,对于大的事务,尽量寻求速度上的优化,没有必要像OLTP要求快速提交,甚至要刻意减慢执行的速度。
    绑定变量真正的用途是在OLTP系统中,这个系统通常有这样的特点,用户并发数很大,用户的请求十分密集,并且这些请求的SQL 大多数是可以重复使用的。
    对于OLAP系统来说,绝大多数时候数据库上运行着的是报表作业,执行基本上是聚合类的SQL 操作,比如group by,这时候,把优化器模式设置为all_rows是恰当的。 而对于一些分页操作比较多的网站类数据库,设置为first_rows会更好一些。 但有时候对于OLAP 系统,我们又有分页的情况下,我们可以考虑在每条SQL 中用hint。 如:
    Select  a.* from table a;
分开设计与优化
    在设计上要特别注意,如在高可用的OLTP环境中,不要盲目地把OLAP的技术拿过来用。
    如分区技术,假设不是大范围地使用分区关键字,而采用其它的字段作为where条件,那么,如果是本地索引,将不得不扫描多个索引,而性能变得更为低下。如果是全局索引,又失去分区的意义。
    并行技术也是如此,一般在完成大型任务时才使用,如在实际生活中,翻译一本书,可以先安排多个人,每个人翻译不同的章节,这样可以提高翻译速度。如果只是翻译一页书,也去分配不同的人翻译不同的行,再组合起来,就没必要了,因为在分配工作的时间里,一个人或许早就翻译完了。
    位图索引也是一样,如果用在OLTP环境中,很容易造成阻塞与死锁。但是,在OLAP环境中,可能会因为其特有的特性,提高OLAP的查询速度。MV也是基本一样,包括触发器等,在DML频繁的OLTP系统上,很容易成为瓶颈,甚至是Library Cache等待,而在OLAP环境上,则可能会因为使用恰当而提高查询速度。
    对于OLAP系统,在内存上可优化的余地很小,增加CPU 处理速度和磁盘I/O 速度是最直接的提高数据库性能的方法,当然这也意味着系统成本的增加。      
    比如我们要对几亿条或者几十亿条数据进行聚合处理,这种海量的数据,全部放在内存中操作是很难的,同时也没有必要,因为这些数据快很少重用,缓存起来也没有实际意义,而且还会造成物理I/O相当大。 所以这种系统的瓶颈往往是磁盘I/O上面的。
    对于OLAP系统,SQL 的优化非常重要,因为它的数据量很大,做全表扫描和索引对性能上来说差异是非常大的。
其他
    Oracle 10g以前的版本建库过程中可供选择的模板有:
        Data Warehouse (数据仓库)
        General Purpose  (通用目的、一般用途)
        New Database
        Transaction Processing  (事务处理)
    Oracle 11g的版本建库过程中可供选择的模板有:
        一般用途或事务处理
        定制数据库

        数据仓库

个人对这些模板的理解为:

     联机分析处理(OLAP,On-line Analytical Processing),数据量大,DML少。使用数据仓库模板
     联机事务处理(OLTP,On-line Transaction Processing),数据量少,DML频繁,并行事务处理多,但是一般都很短。使用一般用途或事务处理模板。

     决策支持系统(DDS,Decision support system),典型的操作是全表扫描,长查询,长事务,但是一般事务的个数很少,往往是一个事务独占系统。

 

 

转自:http://blog.youkuaiyun.com/rfb0204421/article/details/6873284

            http://76287.blog.51cto.com/66287/885475

<think>好的,我现在需要回答用户关于OLAPOLTP的区别、特点及应用场景的问题。首先,我得回忆一下自己之前学过的相关知识,并结合提供的引用内容来组织答案。 首先,用户提到了三个引用,分别涉及OLTPOLAP的数据建模差异、性能调优重点以及Hive在处理OLAP时的特点。需要确保将这些引用内容自然地融入到回答中,同时在适当的位置添加引用标识。 接下来,我需要明确OLTPOLTP的基本定义。根据引用[1],OLTP倾向于数据规范化,而OLAP鼓励重复以优化查询性能。这可能涉及到两者的设计目标不同,OLTP关注事务处理,OLAP关注分析决策。 然后,两者的应用场景。引用[2]提到OLAP用于跑报表、分析决策,用户较少但数据量大,而OLTP可能更多用于日常交易处理,比如订单处理等。引用[3]指出Hive适合OLAP因为不支持事务,而OLTP需要事务支持,所以两者在数据处理级别上有差异。 接下来是特点对比。需要从数据模型、查询类型、用户类型、数据量、响应时间等方面展开。例如,OLTP的数据模型规范化,查询简单且频繁,用户多;而OLAP数据模型可能更倾向于星型或雪花模型,查询复杂,用户少,但处理的数据量大。 应用场景部分需要分别举例子,比如OLTP的银行交易、电商订单,OLAP的销售分析、市场趋势预测等。同时,结合引用中的例子,如OLAP强调磁盘I/O并行执行,而OLTP关注事务完整性快速响应。 还要注意用户提到的系统级指令,比如行内数学表达式用$...$,独立公式用$$...$$,但当前问题可能不涉及数学公式,但需要检查是否有必要使用。例如,如果有性能指标的公式可能需要,但这里可能更多是文字描述。 最后,生成相关问题,需要根据回答内容提出相关的问题,例如性能调优方法、各自的数据建模技术,或者具体工具如Hive在OLAP中的应用等。 在组织结构上,需要先分点说明区别,再讲特点,然后应用场景,确保逻辑清晰。同时,引用标识要自然地放在句末,如引用[^1]、[^2]、[^3]。 现在需要检查是否有遗漏点,比如引用[3]提到的Hive不支持事务,适合OLAP,这也应该作为OLAP的一个特点。同时,OLTP需要支持事务,如银行转账,这属于应用场景的例子。 可能还需要提到响应时间的不同,OLTP要求高响应速度,而OLAP可以容忍较长的查询时间,如Hive查询延迟严重,适合OLAP但不适合交互查询,这也是引用[3]的内容。 总结下来,回答的结构大致如下: 1. 核心差异:处理目标、数据模型、性能指标 2. 特点对比:表格形式,涵盖多个方面 3. 应用场景:分别举例说明 4. 相关问题:基于内容生成三个问题 需要确保每个部分都正确引用相关文献,并且语言通顺,符合中文表达习惯。同时,避免使用Markdown格式,按照用户的要求使用自然的中文段落,分点清晰。</think>### OLAPOLTP的区别、特点及适用场景 #### 一、核心差异 1. **处理目标** - **OLTP(联机事务处理)**:面向日常高频事务操作(如增删改查),注重数据实时性、一致性事务完整性,例如银行转账、订单处理。 - **OLAP(联机分析处理)**:面向复杂数据分析与决策支持,侧重历史数据的聚合与多维分析,例如销售趋势预测、年度财报生成[^2]。 2. **数据模型** - **OLTP**:采用规范化数据模型(如3NF),减少冗余以提升事务效率维护数据一致性[^1]。 - **OLAP**:使用非规范化模型(如星型模型、雪花模型),通过冗余存储优化复杂查询性能[^1]。 3. **性能指标** - **OLTP**:强调高并发、低延迟的短事务处理能力,通常要求毫秒级响应[^2]。 - **OLAP**:关注大批量数据的读取与计算效率,允许较长的查询时间(分钟至小时级),依赖并行处理分区技术[^3]。 #### 二、特点对比 | 维度 | OLTP | OLAP | |---------------|-------------------------------|-------------------------------| | **数据量** | 单次操作数据量小 | 海量历史数据聚合 | | **查询类型** | 简单读写(如SELECT/UPDATE) | 复杂聚合(如GROUP BY/JOIN) | | **用户类型** | 终端用户(如客户、收银员) | 分析人员(如BA、决策者) | | **事务支持** | 支持ACID事务 | 通常无事务需求 | | **存储优化** | 行式存储(快速定位单条记录) | 列式存储(高效聚合多字段) | #### 三、适用场景 1. **OLTP典型场景** - 银行业务:实时处理存取款、转账交易。 - 电商系统:处理订单创建、库存更新。 - 票务系统:实时锁定座位并出票。 2. **OLAP典型场景** - 商业智能:生成月度销售报告,分析客户行为。 - 风险评估:金融领域的历史交易模式分析。 - 科研分析:大规模实验数据的统计建模。 #### 四、技术工具示例 - **OLTP**:MySQL、Oracle(支持高并发事务)。 - **OLAP**:Apache Hive(适合离线分析,但延迟较高)、ClickHouse(列式存储优化聚合查询)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值