OLTP与OLAP的介绍

数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。

OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。

OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

OLTP 系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;

OLAP 系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。

OLTP

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

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),典型的操作是全表扫描,长查询,长事务,但是一般事务的个数很少,往往是一个事务独占系统。

总的来说,OLTP就是面向我们的应用系统数据库的,OLAP是面向数据仓库的。

chat

详细介绍一下 OLTP

OLTP,全称为Online Transaction Processing(在线事务处理),是一种数据库系统处理日常业务交易的方式。

它主要关注在数据库中执行大量短期、交互式的事务,这些事务通常是关于数据的增、删、改操作。

OLTP系统设计的目标是提供高度可靠性、快速的事务处理服务,以满足企业日常运营需要。

以下是OLTP系统的一些特点和关键方面:

  1. 实时性: OLTP系统需要实时地响应用户的交易请求。这意味着它们要能够快速地处理短期事务,确保用户能够迅速得到准确的结果。

  2. 事务性: OLTP强调事务的概念,即一系列数据库操作要么全部成功执行,要么全部回滚。这确保了数据库的一致性和完整性。

  3. 并发处理: OLTP系统通常需要支持大量并发用户。多个用户可能同时访问数据库并执行事务,因此系统必须能够有效地处理并发请求,避免数据冲突和死锁。

  4. 规范化的数据模型: 为了避免数据冗余和提高数据一致性,OLTP系统通常采用规范化的数据模型。这就意味着将数据分解为多个表,以减少数据重复存储。

  5. 查询和写入操作的平衡: OLTP系统通常以写入密集型为特点,因为它们需要处理大量的插入、更新和删除操作。与此同时,查询操作也是重要的,因为用户需要能够检索和查看他们的交易数据。

  6. 高可用性: 由于OLTP系统通常与关键业务操作相关,高可用性是至关重要的。系统必须能够容忍硬件故障、网络故障或其他可能导致服务中断的问题。

  7. 安全性: OLTP系统需要提供对敏感数据的安全访问和控制。这包括身份验证、授权、加密等安全措施,以确保只有授权的用户可以访问特定的数据。

  8. 短时事务: OLTP事务通常是短期的,不涉及复杂的计算或数据分析。相反,它们更专注于对数据的即时修改。

总体而言,OLTP系统在设计上注重对业务交易的高效处理,以支持企业日常运营。

相较之下,OLAP(Online Analytical Processing)系统更专注于分析性质的查询和报告,通常用于支持决策支持和业务智能。

支持 OLTP 的开源数据库有哪些?

有许多开源数据库系统可以用于支持OLTP(在线事务处理)工作负载。

以下是一些常见的开源OLTP数据库:

  1. MySQL: MySQL是一种流行的关系型数据库管理系统(RDBMS),由Oracle公司维护。它支持多用户、多线程,并提供了广泛的SQL功能。MySQL广泛用于Web应用程序和小到中型规模的OLTP系统。

  2. PostgreSQL: PostgreSQL是一种强大的开源对象关系型数据库系统,具有高度的可扩展性和可定制性。它支持复杂的查询和事务,并具有许多高级功能,如触发器、存储过程和地理空间数据处理。

  3. SQLite: SQLite是一种轻量级的嵌入式数据库引擎,适用于嵌入式系统和移动应用。虽然它在大规模OLTP系统中的并发性能方面可能不如其他数据库,但对于小型项目或嵌入式应用而言,它是一个简单而高效的选择。

  4. MariaDB: MariaDB是MySQL的一个分支,由MySQL的创始人之一创建。它保持了与MySQL的兼容性,并添加了一些新特性。MariaDB是一个开源的、关系型数据库管理系统,适用于各种OLTP应用。

  5. CockroachDB: CockroachDB是一个分布式的、可扩展的、支持事务的SQL数据库。它旨在提供强大的一致性和高可用性,特别适用于云环境和需要跨多个地理位置进行分布式部署的场景。

  6. Percona Server for MySQL: Percona Server是MySQL的一个另类分支,旨在提供更好的性能和可伸缩性。它包括一些MySQL的性能增强和其他额外的功能。

除了前面提到的数据库之外,还有一些其他开源数据库系统适用于支持OLTP工作负载。

以下是更多的开源OLTP数据库:

  1. Firebird: Firebird是一个关系型数据库管理系统,它是InterBase数据库的开源版本。它支持跨平台,并具有轻量级、嵌入式和客户端/服务器模式。

  2. VoltDB: VoltDB是一个基于内存的、分布式的OLTP数据库系统。它专注于提供低延迟、高吞吐量的事务处理,特别适用于需要实时数据处理的场景。

  3. ArangoDB: ArangoDB是一种多模型数据库,支持图形、文档和键值存储。它具有灵活的数据建模和查询语言,适用于多种应用场景,包括OLTP。

  4. H2 Database: H2是一个轻量级的嵌入式数据库,支持SQL和JDBC。它可以用作嵌入式数据库或作为独立的服务器模式运行。

  5. RethinkDB: RethinkDB是一种分布式数据库系统,专注于实时应用程序。它提供了实时查询和推送通知,适用于需要实时更新的应用程序。

  6. Tarantool: Tarantool是一种内存中的NoSQL数据库和应用服务器,支持Lua脚本编程。它设计用于处理高度并发的事务性工作负载。

  7. Greenplum Database: Greenplum是一个基于PostgreSQL的开源分布式数据库系统,专注于分析性能。它适用于处理大规模数据集的复杂分析查询。

  8. TiDB: TiDB是一个分布式SQL数据库,具有水平可扩展性和高可用性。它被设计为在云原生环境中运行,适用于OLTP和OLAP混合工作负载。

请注意,这只是一些开源数据库系统的例子,而且数据库领域是不断发展和变化的。

在选择数据库时,应根据具体需求、性能要求和团队技能来权衡不同数据库的优劣。

给出支持 OLTP 的数据库详细对比表格

以下是一些支持OLTP的开源数据库的简要比较。请注意,这里的信息可能在时间上有所变化,建议查阅各个数据库的官方文档和社区资源以获取最新的信息。

特性/数据库 MySQL PostgreSQL SQLite MariaDB CockroachDB Firebird VoltDB ArangoDB
类型 RDBMS RDBMS RDBMS RDBMS Distributed SQL RDBMS In-memory NewSQL Multi-model NoSQL
事务支持
并发处理 非常高
查询语言 SQL SQL SQL SQL SQL SQL SQL AQL (ArangoDB Query Language)
复制和高可用性 可选
分布式架构
内存数据库 是(但非专用)
嵌入式数据库
支持的数据模型 关系型 关系型 关系型 关系型 关系型 关系型 关系型 多模型(文档、图、键值)
开发语言 C/C++, Java, PHP等 C, C++, Java等 C, C++, Java等 C/C++, Java, PHP等 Go C/C++, .NET, Java等 Java JavaScript, Java, Python等
社区活跃度 非常高 非常高
许可证 GPL, 商业许可 PostgreSQL License Public Domain GPL, 商业许可 Apache License 2.0 IPL (InterBase) AGPL, 商业许可 Apache License 2.0

这个比较表格只是提供了一些关键特性的概览。在选择数据库时,还应该考虑具体的性能需求、可用性要求、团队熟悉度、生态系统支持等因素。

最好根据具体项目的需求仔细评估这些数据库,并在需要时进行性能测试。

详细介绍一下 OLAP

OLAP,全称为Online Analytical Processing(在线分析处理),是一种数据处理方法,旨在支持复杂的分析和查询操作。

与OLTP(Online Transaction Processing)专注于处理日常业务交易的操作不同,OLAP主要用于处理和分析大量历史数据,以支持决策制定和业务智能。

以下是一些关于OLAP的详细介绍:

  1. 目的和应用场景:
    • 分析性查询: OLAP系统旨在支持复杂的分析性查询,允许用户对大规模的历史数据集执行聚合、筛选、分组等操作。
    • 决策支持: OLAP用于提供决策制定的支持,帮助企业管理层了解业务趋势、发现模式,并做出基于数据的决策。
  2. 数据模型:
    • 多维数据模型: OLAP系统通常采用多维数据模型,以便更好地表示和理解数据。数据被组织成数据立方体(Data Cube),其中每个维度代表数据的一个方面,而每个单元格包含一个度量值。
    • 维度和层次: 维度是数据的描述性特征,例如时间、地理位置或产品类别。维度可以包含多个层次,例如时间可以有年、季度、月等不同层次。
  3. OLAP操作:
    • 切片(Slice): 在数据立方体中选择一个或多个维度的特定切片,以查看特定子集的数据。
    • 切块(Dice): 在数据立方体中沿一个或多个维度切割,以查看数据的更详细视图。
    • 旋转(Pivot): 更改数据的维度排列方式,以便更好地理解数据。
    • 钻取(Drill-Down)和滚动(Roll-Up): 钻取是从较高层次的摘要数据到更详细的数据的操作,而滚动是从详细数据到摘要数据的操作。
  4. OLAP类型:
    • 多维OLAP(MOLAP): 数据存储在专门的OLAP服务器上,通常使用多维数据库。MOLAP系统提供快速的查询性能,但可能在处理大规模数据时需要更多的存储空间。
    • 关系OLAP(ROLAP): 数据存储在关系数据库中,使用关系数据库管理系统(RDBMS)来执行OLAP操作。ROLAP系统具有更高的灵活性,但在性能上可能略逊于MOLAP。
    • 混合OLAP(HOLAP): 结合了MOLAP和ROLAP的优势,允许在需要时将部分数据存储在OLAP服务器中,而将其他数据存储在关系数据库中。
  5. 常见OLAP工具:
    • Microsoft SQL Server Analysis Services (SSAS): 提供MOLAP和ROLAP功能,集成于Microsoft SQL Server中。
    • IBM Cognos: 提供全面的OLAP和报告功能,适用于企业级BI需求。
    • SAP BW (Business Warehouse): 专注于数据仓库和OLAP,与SAP的其他产品集成。
    • Tableau: 著名的可视化工具,能够与多种数据源集成,包括OLAP数据库。

总体而言,OLAP是在大规模数据集上进行复杂分析和决策支持的关键工具,通过多维数据模型和灵活的查询操作,帮助企业从数据中提取有价值的信息。

OLAP 和 OLTP 二者有什么区别?

OLAP(Online Analytical Processing)和OLTP(Online Transaction Processing)是两种不同类型的数据库处理方法,它们在目的、数据模型、查询操作和应用场景等方面存在明显的区别。

以下是OLAP和OLTP的主要区别:

  1. 目的和应用场景:
    • OLAP: 主要用于支持复杂的分析性查询,帮助企业进行决策支持。OLAP系统适用于需要深入了解历史数据、进行趋势分析、挖掘模式和执行复杂查询的场景。
    • OLTP: 专注于处理日常业务交易,支持诸如插入、更新、删除等操作。OLTP系统适用于支持业务应用程序的在线交易处理,例如订单处理、库存管理和客户服务。
  2. 数据模型:
    • OLAP: 使用多维数据模型,将数据组织成数据立方体(Data Cube)。数据立方体包含多个维度,每个维度代表数据的一个方面,而每个单元格包含度量值。
    • OLTP: 使用规范化的数据模型,将数据分解为多个相关表,以减少数据冗余和提高事务处理效率。
  3. 查询操作:
    • OLAP: 支持复杂的查询操作,例如切片、切块、旋转、钻取和滚动等。这些操作允许用户在大规模数据集上执行灵活的分析。
    • OLTP: 主要处理简单的事务性查询,例如根据主键查找、插入新记录、更新记录或删除记录等操作。
  4. 性能需求:
    • OLAP: 针对复杂查询和分析,通常需要高度灵活性和对大量历史数据的高性能处理。
    • OLTP: 针对大量的短期、交互性的事务,通常需要高并发和低延迟的处理。
  5. 数据处理速度:
    • OLAP: 通常对数据处理速度的要求较低,重点在于支持复杂查询的灵活性。
    • OLTP: 需要快速处理每个事务,通常强调高速的插入、更新和删除操作。
  6. 数据存储和设计:
    • OLAP: 常使用多维数据库或数据仓库,数据通常以聚合的方式存储,以支持快速的查询和分析。
    • OLTP: 通常使用关系数据库,数据以规范化的方式存储,以保持数据的一致性和避免冗余。

总体而言,OLAP和OLTP是为不同目的而设计的两种数据库处理方式,它们在数据建模、查询操作和应用场景上有明显的差异。

OLAP用于支持企业决策和分析,而OLTP用于支持日常的业务交易处理。

支持 OLAP 的开源数据库有哪些?

支持OLAP(Online Analytical Processing)的开源数据库有一些,以下是其中一些常见的:

  1. Apache Kylin: Apache Kylin是一个开源的分布式OLAP引擎,设计用于快速查询大规模的数据集。它可以与Apache Hadoop集成,支持多维数据模型和高性能查询。

  2. Apache Druid: Apache Druid是一种实时的、分布式的OLAP数据库,特别适用于大规模的实时数据分析。它支持灵活的多维数据模型和快速的聚合查询。

  3. ClickHouse: ClickHouse是一个用于OLAP分析的开源列式数据库管理系统。它专注于提供高性能的查询和分析,特别适用于大规模的数据仓库。

  4. PrestoDB: PrestoDB是一个分布式SQL查询引擎,可以用于实时数据分析。它支持与多种数据源集成,并提供高度灵活的查询语言。

  5. Cube.js: Cube.js是一个开源的分析引擎,用于构建实时分析应用程序。它可以与各种数据源集成,并提供基于多维数据模型的OLAP功能。

这些开源数据库系统提供了一些不同的方法和特性,以支持OLAP工作负载。

在选择数据库时,建议根据具体的需求、数据体量和团队的经验来进行评估。 OLAP数据库通常用于支持决策制定和复杂的分析性查询。

参考资料

OLAP、OLTP的介绍和比较

OLAP了解 学习