原理
一个好的OLTP平台,能够大大缩短应用开发时间,提高系统“健壮性”,减少系统维护费用。
OLTP平台是运行在高可靠性操作系统之上的应用技术,它要求操作系统具有多任务处理能力、优良的网络处理能力、较高的数据处理能力以及较好的开放性。因此一般采用Unix操作系统。
OLTP技术一般都和数据库系统(小型机或大型机)或文件系统(容错机)协同完成应用任务。OLTP平台由一组进程构成,采用Client/Server结构,各进程间综合了网络通信、共享内存、管道、IPC(事务指令)等通信方式。数据在各进程间有序流动,各进程各司其职共同完成数据的处理。
OLTP平台应用Client/Server技术:采用OLTP模式的应用一般可看作两级Client/Server结构,OLTP进程作为数据库服务器或其他类型服务的客户端,它负责直接同数据库系统通信,同时,OLTP进程又是它下一级客户的Server。这样的结构使直接与后台数据库服务进程通信的客户较少,而真正的数据访问客户则不受数据库Licenses及网络瓶颈的限制而远超过直接同后台服务进程通信的客户数。这样,减轻了后台服务的负载,使主机专注于事实数据的处理。2
事务属性原子性
(Atomicity):定义工作的独立单元。如果一个事务是分布的,所有影响分离地点数据的子事务都必须象一个事务那样被一起执行。为了保持在多个地点数据的一致性,需要使用下面就将介绍的双阶段认可过程。
一致性
(Consistency):一致性基本上是一种数据库从一个状态变到同等的另一个状态的需求。事务监督器必须检验所有被影响的数据都是一致的。
孤立性
(Isolation):事务必须被孤立地执行直到完成,执行期间不受到其它事务的影响。
持续性
(Durability):这个性质是与事务的最终确认一起进行的。一旦一个事务被检验为对所有受影响的系统都是正确的,它就被认可并且不再需要卷回。
特点联机事务处理OLTP(On-Line Transaction Processing)属于客户服务器结构的应用范畴,它有两个特征:其一是联机,即客户机与服务器必须能够实时通信,由客户机发起请求,直到收到服务器的确认应答后,整个事物才能完成;其二是事务(或称交易),即客户端与服务器之间通过交易的形式进行协作。3
OLTP的特点在于事务量大,但事务内容比较简单且重复率高。大量的数据操作主要涉及一些增加、删除和修改操作,但一般仅仅涉及一张或几张表的少数记录。因此OLTP适合于处理高度结构化的信息。与其相适应,在数据组织方面OLTP以应用为核心,是应用驱动的,数据模型采用E—R模型。4
设计准则为了实现优化系统性能的目的,在设计和开发0LTP系统时,应该尽量遵守以下几条基本准则:
(1)OLTP与决策支持工作量。如果一个企业经常既需要承担它的联机业务需求,又需要承担某些决策支持或数据提炼需求,而且每一项工作都会有不同的要求,经常彼此发生冲突,那么为了使每项工作的性能得到最大的发挥,最好是将决策支持数据转移到一个独立的数据库中。决策支持数据库物理上与OLTP数据库处于同一个系统中,只要系统有足够的输入/输出容量用于维持这两项工作。当然分离两个数据库也会带来一些问题,系统需要采取措施保持两个数据库的同步。
(2)数据放置与文件组。一个OLTP系统最关心的问题莫过于维持良好的输入/输出性能。因为经常会有大量的用户以随机的方式访问和修改OLTP系统的数据,所以保持输入/输出的均衡很关键。为了消除潜在的输入/输出瓶颈,系统应该将数据分布到尽可能多的物理磁盘上。在sQL server中。最简单的分布数据的方法是使用文件组。将数据存放在多个文件和文件组中,允许跨越多个磁盘、多个磁盘控制器或RAID系统创建一个数据库,这样的做法可以提高数据库的性能。
(3)调整OLTP事务。一条好的适用于0LTP系统的原则是争取使事务尽可能地短,这会使查询获取锁的持续时间减少到最小,同时提高了整个数据的同步性和性能,而且在事务中避免自由形态的用户输入字段,因为假如事务采用了一种无法预料的输入形式,即使输入是合法的,但预测查询将要访问的数据的范围和数量也会是很困难的。
(4)控制数据内容。几个有关数据库数据的策略能够提高0LTP系统的性能。一般而言,OLTP系统不需要或很少需要它们的联机表的历史数据或总计数据。很少引用的数据应该被归档到单独的数据库中,或者从频繁被更新的表中移出,转而移人仅包含历史数据的表中。此策略使表和索引尽可能的短小并且会提高事务的性能。
(5)数据备份。OLTP系统的本质是一种连续操作,这意味着该系统必须在一周7天、一天24小时中都可用。0LTP系统可以停机,但必须控制在一个绝对最小值的范围内。所以系统仍需在其利用率最低时进行备份,这样可将备份过程对终端用户的影响减到最小。
(6)索引。对于OLTP系统,索引不是建得越多越好。实际上,应该避免为表创建过多的索引。因为每次在增加一行或修改一个索引字段时,创建的每一条索引都必须被更新。如果定义了太多不必要的索引,那么当系统更新大量的索引数据时,它会出现巨大变化。1