联机事务处理与决策支持
许多应用程序属于两种主要的数据库应用程序类别:
联机事务处理 (OLTP)
决策支持
这两种应用程序的特征对设计数据库时的注意事项有很大的影响。
联机事务处理
联机事务处理数据库应用程序是管理不断变化的数据的最佳选择。这些应用程序通常涉及很多用户,他们同时执行更改实时数据的事务。尽管用户的各个数据请求通常只涉及少量记录,但这些请求有许多是同时发生的。这种数据库的常见示例是航空订票系统和银行事务系统。在这种应用程序中,主要的问题是并发性和原子性。
数据库系统中的并发性控制确保两个用户不能更改相同的数据,或者一个用户不能在另一个用户完成数据操作之前更改该部分数据。例如,如果您正在告诉一位航空订票代理要预订某一航班上最后一个座位,该代理开始用您的姓名预订该座位,这时,其他代理则不能再告诉其他乘客还可以预订该座位。
原子性确保事务中的所有步骤都作为一个组成功地完成。如果一个步骤失败,则不应完成其他步骤。例如,银行事务涉及两个步骤:从您的经常帐户中取出资金,然后打入您的存款帐户。如果从您的经常帐户中取出资金的步骤成功完成,就需要确保将该资金打入您的存款帐户或重新打回您的经常帐户。
联机事务处理设计注意事项
事务处理系统数据库的设计应能够改进下列方面:
很好的数据放置
对于 OLTP 系统,输入/输出瓶颈是一个尤为关心的问题,原因在于修改整个数据库中数据的用户很多。设计数据库时,应确定数据可能的访问模式,并将经常访问的数据放在一起。使用文件组和 RAID(独立磁盘冗余阵列)系统对此会有所帮助。
缩短事务,以便将长期锁减至最少并改善并发性
在事务期间,避免用户交互。无论何时,只要有可能,就通过运行单个存储过程来处理整个事务。在事务内对表的引用顺序可能会影响并发性。将对经常访问的表的引用置于事务的末尾,以便将控制锁的持续时间减至最短。
联机备份
OLTP 系统的常见特点是连续操作,操作中的中断时间保持为绝对的最少。也就是说,它们一天 24 小时,一周 7 天进行操作。尽管 SQL Server 数据库引擎 可以在数据库正在使用时对其进行备份,但是应将备份过程安排在活动不频繁时进行,以使对用户的影响减至最小。
数据库的高度规范化
减少冗余信息,以加快更新速度并改善并发性。减少数据还可以加快备份的速度,因为只需要备份更少的数据。
很少或没有历史数据或聚合数据
可以将很少引用的数据归档到单独的数据库中,或者从经常更新的表中移出,放到只包含历史数据的表中。这将使表尽可能地小,从而缩短备份时间,改善查询性能。
小心使用索引
每次添加或修改行时,必须更新索引。若要避免对经常更新的表进行过多的索引,索引范围应保持较窄。可以使用数据库引擎优化顾问来设计索引。
OLTP 系统需要最佳的硬件配置以处理较大的并发用户数目和快速响应时间
决策支持
决策支持数据库应用程序最适于不更改数据的数据查询。例如,公司可以定期地按日期、销售地区或产品汇总其销售数据,并将该信息存储在单独的数据库中以供高级管理人员分析时使用。若要作出业务决策,用户必须能够基于各种条件,通过查询数据快速地确定销售趋势。然而,他们不必更改这些数据。决策支持数据库中的表建立了大量索引,通常要对原始数据进行预处理和组织,以支持要使用的各种查询。因为用户并不更改数据,所以不存在并发性和原子性问题;又因为数据只定期更改,所以可以在非工作时间和低流量时间对数据库进行大容量更新。
决策支持设计注意事项
决策支持系统数据库的设计应能够改进下列方面:
大量索引
决策支持系统只需要很少的更新,但数据量很大。可使用大量索引提高查询性能。
数据库的非规范化
引入预聚合或汇总数据以满足常见的查询要求,并缩短查询响应时间。
使用星型架构或雪花架构来组织数据库内的数据。