关系型数据库的特殊应用
2016-07-05周乾
周乾
摘 要:通过对常用的关系型数据库功能特点的分析,对其在日常软件开发和项目应用中发挥的作用进行介绍,对部分数据库平台在一些特殊情况下的使用方法进行了分析。
关键词:关系型数据库;软件开发
一、关系型数据库简介
现在信息系统的应用已经十分广泛,每个人都会跟许多系统打交道,在我们通过系统的图形化界面操作时,后台数据库也在默默无闻的为我们记录下每一条操作的信息。数据库系统从诞生到现在已经经历了五十余年的发展,从简单的分类比较到现阶段的人工智能大数据应用,其基本构成和功能都已经发生了翻天覆地的变化。在对于数据库的广泛定义中,对于数据的结构化和关系化要求多次被提及,因而不难发现,关系型数据库在整个数据库发展进程中占有着比较重要的位置。
关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。关系型数据库目前并不是唯一的数据库模型,也并不是性能最优的数据库模型,但是关系型数据库却是现今使用最广泛、最容易理解和使用的数据库模型,已经被大多数的企业级信息系统应用。
二、常用关系型数据库
目前主流的关系型数据库有Oracle、MySQL、Microsoft SQL Server、Microsoft Access等多个品种,每种数据库的语法、功能和特性也各具特色。
Oracle数据库是由甲骨文公司开发,并于1989年正式进入中国市场。虽然当时的Oracle尚名不见经传,通过多年的发展积聚了众多领先性的数据库系统开发经验,在集群技术、高可用性、安全性、系统管理等方面都取得了较好的成绩。Oracle产品除了数据库系统外,还有应用系统、开发工具等。在数据库可操作平台上,Oracle可在所有主流平台上运行,因而可通过运行于较高稳定性的操作系统平台,提高整个数据库系统的稳定性。
MySQL数据库是一种开放源代码的关系型数据库管理系统(RDBMS),可以使用最常用结构化查询语言进行数据库操作。也因为其开源的特性,可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL数据库因其体积小、速度快、总体拥有成本低而受到中小企业的热捧,虽然其功能的多样性和性能的稳定性差强人意,但是在不需要大规模事务化处理的情况下,MySQL也是管理数据内容的好选择之一。
Microsoft SQL Server数据库最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个操作系统版本。在Windows NT 推出后,Microsoft 将SQL Server 移植到Windows NT系统上,因而SQL Server数据库伴随着Windows操作系统发展壮大,其用户界面的友好和部署的简捷,都与其运行平台息息相关,通过Microsoft的不断推广,SQL Server数据库的占有率随着Windows操作系统的推广不断攀升。
三、具体应用案例
随着数据库管理平台的功能日益强大,单纯的记录信息并防止记录丢失已不再是其具备功能的全部,数据库系统拓展出了许多基于关系化数据处理的其它功能。
1.Oracle数据库的审计功能
Oracle中审计总体上可分为“标准审计”和“基于政策的审计”,在Oracle10G之后审计功能得到很大增强。其中标准审计可分为用户级审计和系统级审计。用户级审计是任何Oracle用户可设置的审计,主要是用户针对自己创建的数据库表或视图进行审计,记录所有用户对这些表或视图的一切成功或不成功的访问要求以及各种类型的SQL操作。系统级审计只能由数据库管理员设置,用以监测成功或失败的登录要求、监测GRANT和REVOKE操作以及其他数据库级权限下的操作。
在ORACLE中分别支持以下三种标准审计类型:语句审计,对某种类型的SQL语句审计,不指定结构或对象,审计语句的成功执行、不成功执行,或者全部状态。特权审计,对执行相应动作的系统特权的使用审计,对每一用户会话审计语句执行一次或者对语句每次执行审计一次。对象审计,对一特殊模式对象上的指定语句的审计,对全部用户或指定用户的活动的审计。
2.Mysql高并发“秒杀”应用
开源的MySQL其InnoSQL版本免费提供了线程池,可以保证应用在大并发量下依旧应用稳定,特别是对于秒杀类的应用,而秒杀应用对于数据库压力的问题所在,即大并发量下更新同一行数据的压力。
在秒杀进行时,最主要是对库存相关内容进行操作,在操作前可能需要插入一些其他操作,然后就是对库存信息进行更新。随着并发量的增大,事务处理的性能不断下降,因此秒杀操作虽然是并行的,但是在数据库层面是串行的。随着并发的不断增加,不断发生的锁等待和唤醒导致性能的急剧下降。如果通过性能工具来查看的话,可以发现死锁检测占据了大部分的CPU时间。线程池可以在MySQL上层限制住同时运行的事务数,这样就解决了由秒杀而导致的资源不足问题,应用层做好对于单个商品购买的数量限制,MySQL数据库层使用线程池技术来保证大并发量下的性能同时可以再调整线程池的OverSubscribe参数用来进一步提升性能。
3.检查是“谁”对数据数据库进行了操作
对于数据库操作记录的检查有多种方法,可以通过数据库的审计功能、触发器功能和Logmnr日志这三种方法實现。
审计功能,先设置数据库的audit_trail参数,决定审计结果的保存地点,然后执行audit insert on schema. table_name whenever successful;当有执行insert操作的动作后,根据audit_trail 参数到相应位置去查看审计结果。
触发器操作,建立触发器实质上也是审计功能的体现,但是其单单基于值的审计,比数据库审计所需要的时间要长一些,具体实现方法见下图。
通过Logmnr日志查看,Logmnr工具可以获得数据库的归档日志文件内容,且该工具可以分析出对于数据库操作的语句信息等重要内容。
(作者单位:大庆炼化公司信息中心)