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系统的一些特点和关键方面:
-
实时性: OLTP系统需要实时地响应用户的交易请求。这意味着它们要能够快速地处理短期事务,确保用户能够迅速得到准确的结果。
-
事务性: OLTP强调事务的概念,即一系列数据库操作要么全部成功执行,要么全部回滚。这确保了数据库的一致性和完整性。
-
并发处理: OLTP系统通常需要支持大量并发用户。多个用户可能同时访问数据库并执行事务,因此系统必须能够有效地处理并发请求,避免数据冲突和死锁。
-
规范化的数据模型: 为了避免数据冗余和提高数据一致性,OLTP系统通常采用规范化的数据模型。这就意味着将数据分解为多个表,以减少数据重复存储。
-
查询和写入操作的平衡: OLTP系统通常以写入密集型为特点,因为它们需要处理大量的插入、更新和删除操作。与此同时,查询操作也是重要的,因为用户需要能够检索和查看他们的交易数据。
-
高可用性: 由于OLTP系统通常与关键业务操作相关,高可用性是至关重要的。系统必须能够容忍硬件故障、网络故障或其他可能导致服务中断的问题。
-
安全性: OLTP系统需要提供对敏感数据的安全访问和控制。这包括身份验证、授权、加密等安全措施,以确保只有授权的用户可以访问特定的数据。
-
短时事务: OLTP事务通常是短期的,不涉及复杂的计算或数据分析。相反,它们更专注于对数据的即时修改。
总体而言,OLTP系统在设计上注重对业务交易的高效处理,以支持企业日常运营。
相较之下,OLAP(Online Analytical Processing)系统更专注于分析性质的查询和报告,通常用于支持决策支持和业务智能。
支持 OLTP 的开源数据库有哪些?
有许多开源数据库系统可以用于支持OLTP(在线事务处理)工作负载。
以下是一些常见的开源OLTP数据库:
-
MySQL: MySQL是一种流行的关系型数据库管理系统(RDBMS),由Oracle公司维护。它支持多用户、多线程,并提供了广泛的SQL功能。MySQL广泛用于Web应用程序和小到中型规模的OLTP系统。
-
PostgreSQL: PostgreSQL是一种强大的开源对象关系型数据库系统,具有高度的可扩展性和可定制性。它支持复杂的查询和事务,并具有许多高级功能,如触发器、存储过程和地理空间数据处理。
-
SQLite: SQLite是一种轻量级的嵌入式数据库引擎,适用于嵌入式系统和移动应用。虽然它在大规模OLTP系统中的并发性能方面可能不如其他数据库,但对于小型项目或嵌入式应用而言,它是一个简单而高效的选择。
-
MariaDB: MariaDB是MySQL的一个分支,由MySQL的创始人之一创建。它保持了与MySQL的兼容性,并添加了一些新特性。MariaDB是一个开源的、关系型数据库管理系统,适用于各种OLTP应用。
-
CockroachDB: CockroachDB是一个分布式的、可扩展的、支持事务的SQL数据库。它旨在提供强大的一致性和高可用性,特别适用于云环境和需要跨多个地理位置进行分布式部署的场景。
-
Percona Server for MySQL: Percona Server是MySQL的一个另类分支,旨在提供更好的性能和可伸缩性。它包括一些MySQL的性能增强和其他额外的功能。
除了前面提到的数据库之外,还有一些其他开源数据库系统适用于支持OLTP工作负载。
以下是更多的开源OLTP数据库:
-
Firebird: Firebird是一个关系型数据库管理系统,它是InterBase数据库的开源版本。它支持跨平台,并具有轻量级、嵌入式和客户端/服务器模式。
-
VoltDB: VoltDB是一个基于内存的、分布式的OLTP数据库系统。它专注于提供低延迟、高吞吐量的事务处理,特别适用于需要实时数据处理的场景。
-
ArangoDB: ArangoDB是一种多模型数据库,支持图形、文档和键值存储。它具有灵活的数据建模和查询语言,适用于多种应用场景,包括OLTP。
-
H2 Database: H2是一个轻量级的嵌入式数据库,支持SQL和JDBC。它可以用作嵌入式数据库或作为独立的服务器模式运行。
-
RethinkDB: RethinkDB是一种分布式数据库系统,专注于实时应用程序。它提供了实时查询和推送通知,适用于需要实时更新的应用程序。
-
Tarantool: Tarantool是一种内存中的NoSQL数据库和应用服务器,支持Lua脚本编程。它设计用于处理高度并发的事务性工作负载。
-
Greenplum Database: Greenplum是一个基于PostgreSQL的开源分布式数据库系统,专注于分析性能。它适用于处理大规模数据集的复杂分析查询。
-
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的详细介绍:
- 目的和应用场景:
- 分析性查询: OLAP系统旨在支持复杂的分析性查询,允许用户对大规模的历史数据集执行聚合、筛选、分组等操作。
- 决策支持: OLAP用于提供决策制定的支持,帮助企业管理层了解业务趋势、发现模式,并做出基于数据的决策。
- 数据模型:
- 多维数据模型: OLAP系统通常采用多维数据模型,以便更好地表示和理解数据。数据被组织成数据立方体(Data Cube),其中每个维度代表数据的一个方面,而每个单元格包含一个度量值。
- 维度和层次: 维度是数据的描述性特征,例如时间、地理位置或产品类别。维度可以包含多个层次,例如时间可以有年、季度、月等不同层次。
- OLAP操作:
- 切片(Slice): 在数据立方体中选择一个或多个维度的特定切片,以查看特定子集的数据。
- 切块(Dice): 在数据立方体中沿一个或多个维度切割,以查看数据的更详细视图。
- 旋转(Pivot): 更改数据的维度排列方式,以便更好地理解数据。
- 钻取(Drill-Down)和滚动(Roll-Up): 钻取是从较高层次的摘要数据到更详细的数据的操作,而滚动是从详细数据到摘要数据的操作。
- OLAP类型:
- 多维OLAP(MOLAP): 数据存储在专门的OLAP服务器上,通常使用多维数据库。MOLAP系统提供快速的查询性能,但可能在处理大规模数据时需要更多的存储空间。
- 关系OLAP(ROLAP): 数据存储在关系数据库中,使用关系数据库管理系统(RDBMS)来执行OLAP操作。ROLAP系统具有更高的灵活性,但在性能上可能略逊于MOLAP。
- 混合OLAP(HOLAP): 结合了MOLAP和ROLAP的优势,允许在需要时将部分数据存储在OLAP服务器中,而将其他数据存储在关系数据库中。
- 常见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的主要区别:
- 目的和应用场景:
- OLAP: 主要用于支持复杂的分析性查询,帮助企业进行决策支持。OLAP系统适用于需要深入了解历史数据、进行趋势分析、挖掘模式和执行复杂查询的场景。
- OLTP: 专注于处理日常业务交易,支持诸如插入、更新、删除等操作。OLTP系统适用于支持业务应用程序的在线交易处理,例如订单处理、库存管理和客户服务。
- 数据模型:
- OLAP: 使用多维数据模型,将数据组织成数据立方体(Data Cube)。数据立方体包含多个维度,每个维度代表数据的一个方面,而每个单元格包含度量值。
- OLTP: 使用规范化的数据模型,将数据分解为多个相关表,以减少数据冗余和提高事务处理效率。
- 查询操作:
- OLAP: 支持复杂的查询操作,例如切片、切块、旋转、钻取和滚动等。这些操作允许用户在大规模数据集上执行灵活的分析。
- OLTP: 主要处理简单的事务性查询,例如根据主键查找、插入新记录、更新记录或删除记录等操作。
- 性能需求:
- OLAP: 针对复杂查询和分析,通常需要高度灵活性和对大量历史数据的高性能处理。
- OLTP: 针对大量的短期、交互性的事务,通常需要高并发和低延迟的处理。
- 数据处理速度:
- OLAP: 通常对数据处理速度的要求较低,重点在于支持复杂查询的灵活性。
- OLTP: 需要快速处理每个事务,通常强调高速的插入、更新和删除操作。
- 数据存储和设计:
- OLAP: 常使用多维数据库或数据仓库,数据通常以聚合的方式存储,以支持快速的查询和分析。
- OLTP: 通常使用关系数据库,数据以规范化的方式存储,以保持数据的一致性和避免冗余。
总体而言,OLAP和OLTP是为不同目的而设计的两种数据库处理方式,它们在数据建模、查询操作和应用场景上有明显的差异。
OLAP用于支持企业决策和分析,而OLTP用于支持日常的业务交易处理。
支持 OLAP 的开源数据库有哪些?
支持OLAP(Online Analytical Processing)的开源数据库有一些,以下是其中一些常见的:
-
Apache Kylin: Apache Kylin是一个开源的分布式OLAP引擎,设计用于快速查询大规模的数据集。它可以与Apache Hadoop集成,支持多维数据模型和高性能查询。
-
Apache Druid: Apache Druid是一种实时的、分布式的OLAP数据库,特别适用于大规模的实时数据分析。它支持灵活的多维数据模型和快速的聚合查询。
-
ClickHouse: ClickHouse是一个用于OLAP分析的开源列式数据库管理系统。它专注于提供高性能的查询和分析,特别适用于大规模的数据仓库。
-
PrestoDB: PrestoDB是一个分布式SQL查询引擎,可以用于实时数据分析。它支持与多种数据源集成,并提供高度灵活的查询语言。
-
Cube.js: Cube.js是一个开源的分析引擎,用于构建实时分析应用程序。它可以与各种数据源集成,并提供基于多维数据模型的OLAP功能。
这些开源数据库系统提供了一些不同的方法和特性,以支持OLAP工作负载。
在选择数据库时,建议根据具体的需求、数据体量和团队的经验来进行评估。 OLAP数据库通常用于支持决策制定和复杂的分析性查询。