数据库设计的一个根基就是要弄清楚数据库的类型。
当今的数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing在线事务处理,联机事务处理)、联机分析处理OLAP(On-Line Analytical Processing在线分析处理,联机分析处理)。
OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。
OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
这两类系统在数据库的设计上是如此不同,甚至有些地方的设计是貌似相悖的。比如OLTP系统强调数据库的内在效率,强调内存各种指标的命中率,强调绑定变量,强调并发操作;而OLAP系统则强调数据分析,强调SQL执行时长,强调磁盘I/O,强调分区等。因为这些区别,在数据库设计的阶段,弄清楚数据库类型是至关重要的,只在在这个前提之下,才能够讨论数据库的具体设计,否则设计必须是盲目的,"皮之不存毛将焉附".
OLTP:用户并发数都很多,但他们只对数据库做很小的操作,数据库侧重于对用户操作的快速响应,这是对数据库最重要的性能要求。
对于一个OLTP来讲,数据库内存的设计显得很重要,如果数据库可以在内存中处理,那么数据库的性能无疑会提高很多。内存的设计通常是通过调整Oracle和内存相关的初始化参数来实现的,比较重要的几个是内存相关的参数,包括SGA的大小(Data Buffer,Shared Pool)、PGA大小(排序区,Hash区等),这些参一个OLTP系统里显得至关重要,OLTP系统是一个数据块变化非常频繁、SQL语句提交非常频繁的系统。对于数据块来说,应尽可能让数据块保存在内存当中,对于SQL来说,尽可能使用变量绑定技术来达到SQL的重用,减少物理I/O和重复的SQL解析,能极大地改善数据库性能。
常见的OLTP系统有:门票在线销售系统,银行交易等。
OLAP:相对于OLTP用户并发数较少,内存可以优化的余地较小,甚至觉得增加CPU处理速度和磁盘I/O速度是最直接的提高数据库性能的方式方式,但这将意味着成本的增加。实际上,用户对OLAP系统性能的期望远远没有对OLTP性能的期望那么高。在OLAP系统中,SQL的优化显得非常重要,分区技术在OLAP数据库中很重要。
OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
下表列出OLTP和OLAP之间的比较
OLTP
OLAP
用户
操作人员,低层管理人员
决策人员,高级管理人员
功能
日常操作处理
分析决策
DB设计
面向应用
面向主题
数据
当前的,最新的细节的,二维的分立的
历吏的,聚集的,多维的,集成的,统一的
存取
读 /写数十条记录
读上百万条记录
工作单位
简单的事务
复杂的查询
DB大小
100MB-GB
100GB-TB
Oracle 10g以前的版本建库过程中可供选择的模板有:
- Data Warehouse (数据仓库)
- General Purpose (通用目的、一般用途)
- New Database
- Transaction Processing (事务处理)
Oracle 11g的版本建库过程中可供选择的模板有:
- 一般用途或事务处理
- 定制数据库
- 数据仓库
个人对这些模板的理解为:
联机分析处理(OLAP,On-line Analytical Processing),数据量大,DML少。使用数据仓库模板
联机事务处理(OLTP,On-line Transaction Processing),数据量少,DML频繁。使用一般用途或事务处理模板
联机事务处理(OLTP,On-line Transaction Processing),DML操作频繁,并行事务处理多,但是一般都很短。
决策支持系统(DDS,Decision support system),典型的操作是全表扫描,长查询,长事务,但是一般事务的个数很少,往往是一个事务独占系统。