什么是OLTP、OLAP?

188 阅读6分钟

在线交易处理系统是专门为处理大量并发用户的大量交易而设计的,同时保证数据的完整性。

在线交易处理(OLTP)是ATM取款、信用卡支付、票务和预订系统、网上购物和一般电子商务背后的实时数据处理。在线交易处理系统是专门为处理大量并发用户的大量交易而设计的。

OLTP数据库为电子商务提供后端或存储层,事实上也为大多数现代计算机应用提供后端或存储层。虽然OLTP数据库传统上是SQL关系型数据库,但也有可能将一些NoSQL数据库用于同样的目的。我们下面的讨论大多是以SQL关系型数据库为例的。

OLTP vs. OLAP

OLTP数据库通常处理来自许多用户的大量小型、快速交易。这些事务涉及以保证一致的方式改变数据库,在事务中使用CRUD(创建、读取、更新、删除)操作。虽然OLTP数据库有时也支持分析性查询,但该功能通常在单独的OLAP(在线分析处理)数据库或数据仓库中执行。OLTP数据库是为收集和修改数据而优化的。OLAP数据库则为分析而优化。

什么是CRUD?

CRUD(创建、读取、更新和删除)是数据库操作的基本集合。在SQL数据库中,INSERT语句执行记录创建,SELECT语句读取记录,UPDATE语句更新记录,DELETE语句删除记录。这些语句组成了DML(数据操作语言)。SQL数据库还支持DDL(数据定义语言)来定义数据库、表、索引、视图和其他数据库对象。

什么是数据库事务?

在SQL数据库中,数据库事务是对一连串SQL语句的包装,有两个可能的端点。COMMIT或ROLLBACK批处理。例如,银行转账涉及从一个账户中提取一笔金额,并将相同的金额存入一个不同的账户。如果两个操作都成功了,那么事务就会提交。如果任何一个操作都失败了,那么事务--包括这两个操作--就会回滚到事务开始前的状态,这样,两个账户中的资金总量就会保持不变。

什么是ACID数据库属性?

数据库事务应该表现出所有四个ACID属性:原子性、一致性、隔离性和耐久性。如上所述,原子性是由事务提交和回滚来保证的。整个事务被视为一个单一的、原子性的操作。

一致性是正确的交易实施的最终产物:参与转账的账户中的资金总额保持不变。隔离性是指其他交易不能发现交易的任何中间状态。持久性是指一旦事务提交,即使系统发生故障,新的数值也不会被撤销。

ACID属性在集中式数据库中比较容易保证。而在集群式或分布式数据库中,它们则更难保证。

例如,一些分布式数据库只要求最终的 一致性,这使得他们可以说,在所有数据库节点完成写入之前,一个事务已经提交。这加快了分布式事务的速度,但是要求后来的事务期望一致性,要么等待所有的写入完成,要么从事务的原始位置读取。

保证 一致性的分布式数据库可能会有较高的事务延迟,但与最终一致性的数据库相比,造成应用错误的可能性要小得多,例如,当远程读取在所有位置的前一个事务完成写入之前完成时。

什么是交易延时?

延迟既指数据库的响应时间,也指应用程序的端到端响应时间。事务延时是指从事务开始到事务提交的时间。

用于OLTP的数据库模式

为了支持高交易率,OLTP数据库的数据库模式通常涉及小行大小和最小的索引。从历史上看,这意味着要确保数据库模式是第三正态形式。

什么是第三正态形式?

第三正态形式(3NF),由Edgar F. Codd在1971年定义,是对数据库模式的一组要求,以减少数据的重复,避免数据的异常,确保参考的完整性,并简化数据管理。它基本上是说,任何给定的表只包含作为主键属性的字段。

如果你有一个病人表,其主键是病人号码,那么它的字段必须是关于病人的,而不是医院、医生和保险公司的,尽管该表可以包含对其他关于这些事情的表的引用(外键)。比尔-肯特对3NF的巧妙总结是"[每个]非键[属性]都必须提供一个关于键的事实,整个键,除了键之外什么都没有,所以请帮助我Codd。"

NoSQL数据库可以作为OLTP发挥作用吗?

虽然我们主要讨论了具有强一致性的关系型数据库,但也一些NoSQL数据库是为OLTP设计的。如果你处于需要或想要NoSQL数据库进行交易处理的位置,你需要将自己限制在具有ACID属性的NoSQL数据库。避免那些仅限于OLTP的最终一致性的数据库,特别是对于金融应用。在承诺使用一个用于金融交易处理的数据库之前,请与你的审计师核对。

衡量OLTP性能

在关系型数据库的早期,每个供应商都在推广不同的交易处理性能基准,这些基准都是为自己的产品而调整的。交易处理性能委员会的成立是为了创建和审核供应商的中立基准。TPC基准C(TPC-C)是一个广泛使用的OLTP基准。还有其他的公共数据库基准,可能适用于你的情况;你也可以创建你自己的,但是反映真实世界使用情况的诚实的基准的编写和运行是令人惊讶的棘手。

总的来说,OLTP数据库应该简单地完成其工作,即快速和持久地记录交易。对于分析来说,考虑建立一个单独的数据湖或数据仓库,以及一个ETL或ELT流程,从OLTP数据库中填充分析数据库。OLTP是一回事,OLAP是另一回事。