周乾
摘 要:通過對常用的關(guān)系型數(shù)據(jù)庫功能特點的分析,對其在日常軟件開發(fā)和項目應(yīng)用中發(fā)揮的作用進(jìn)行介紹,對部分?jǐn)?shù)據(jù)庫平臺在一些特殊情況下的使用方法進(jìn)行了分析。
關(guān)鍵詞:關(guān)系型數(shù)據(jù)庫;軟件開發(fā)
一、關(guān)系型數(shù)據(jù)庫簡介
現(xiàn)在信息系統(tǒng)的應(yīng)用已經(jīng)十分廣泛,每個人都會跟許多系統(tǒng)打交道,在我們通過系統(tǒng)的圖形化界面操作時,后臺數(shù)據(jù)庫也在默默無聞的為我們記錄下每一條操作的信息。數(shù)據(jù)庫系統(tǒng)從誕生到現(xiàn)在已經(jīng)經(jīng)歷了五十余年的發(fā)展,從簡單的分類比較到現(xiàn)階段的人工智能大數(shù)據(jù)應(yīng)用,其基本構(gòu)成和功能都已經(jīng)發(fā)生了翻天覆地的變化。在對于數(shù)據(jù)庫的廣泛定義中,對于數(shù)據(jù)的結(jié)構(gòu)化和關(guān)系化要求多次被提及,因而不難發(fā)現(xiàn),關(guān)系型數(shù)據(jù)庫在整個數(shù)據(jù)庫發(fā)展進(jìn)程中占有著比較重要的位置。
關(guān)系型數(shù)據(jù)庫,是指采用了關(guān)系模型來組織數(shù)據(jù)的數(shù)據(jù)庫,其以行和列的形式存儲數(shù)據(jù),以便于用戶理解,關(guān)系型數(shù)據(jù)庫這一系列的行和列被稱為表,一組表組成了數(shù)據(jù)庫。用戶通過查詢來檢索數(shù)據(jù)庫中的數(shù)據(jù),而查詢是一個用于限定數(shù)據(jù)庫中某些區(qū)域的執(zhí)行代碼。關(guān)系模型可以簡單理解為二維表格模型,而一個關(guān)系型數(shù)據(jù)庫就是由二維表及其之間的關(guān)系組成的一個數(shù)據(jù)組織。關(guān)系型數(shù)據(jù)庫目前并不是唯一的數(shù)據(jù)庫模型,也并不是性能最優(yōu)的數(shù)據(jù)庫模型,但是關(guān)系型數(shù)據(jù)庫卻是現(xiàn)今使用最廣泛、最容易理解和使用的數(shù)據(jù)庫模型,已經(jīng)被大多數(shù)的企業(yè)級信息系統(tǒng)應(yīng)用。
二、常用關(guān)系型數(shù)據(jù)庫
目前主流的關(guān)系型數(shù)據(jù)庫有Oracle、MySQL、Microsoft SQL Server、Microsoft Access等多個品種,每種數(shù)據(jù)庫的語法、功能和特性也各具特色。
Oracle數(shù)據(jù)庫是由甲骨文公司開發(fā),并于1989年正式進(jìn)入中國市場。雖然當(dāng)時的Oracle尚名不見經(jīng)傳,通過多年的發(fā)展積聚了眾多領(lǐng)先性的數(shù)據(jù)庫系統(tǒng)開發(fā)經(jīng)驗,在集群技術(shù)、高可用性、安全性、系統(tǒng)管理等方面都取得了較好的成績。Oracle產(chǎn)品除了數(shù)據(jù)庫系統(tǒng)外,還有應(yīng)用系統(tǒng)、開發(fā)工具等。在數(shù)據(jù)庫可操作平臺上,Oracle可在所有主流平臺上運(yùn)行,因而可通過運(yùn)行于較高穩(wěn)定性的操作系統(tǒng)平臺,提高整個數(shù)據(jù)庫系統(tǒng)的穩(wěn)定性。
MySQL數(shù)據(jù)庫是一種開放源代碼的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),可以使用最常用結(jié)構(gòu)化查詢語言進(jìn)行數(shù)據(jù)庫操作。也因為其開源的特性,可以在General Public License的許可下下載并根據(jù)個性化的需要對其進(jìn)行修改。MySQL數(shù)據(jù)庫因其體積小、速度快、總體擁有成本低而受到中小企業(yè)的熱捧,雖然其功能的多樣性和性能的穩(wěn)定性差強(qiáng)人意,但是在不需要大規(guī)模事務(wù)化處理的情況下,MySQL也是管理數(shù)據(jù)內(nèi)容的好選擇之一。
Microsoft SQL Server數(shù)據(jù)庫最初是由Microsoft、Sybase和Ashton-Tate三家公司共同開發(fā)的,于1988 年推出了第一個操作系統(tǒng)版本。在Windows NT 推出后,Microsoft 將SQL Server 移植到Windows NT系統(tǒng)上,因而SQL Server數(shù)據(jù)庫伴隨著Windows操作系統(tǒng)發(fā)展壯大,其用戶界面的友好和部署的簡捷,都與其運(yùn)行平臺息息相關(guān),通過Microsoft的不斷推廣,SQL Server數(shù)據(jù)庫的占有率隨著Windows操作系統(tǒng)的推廣不斷攀升。
三、具體應(yīng)用案例
隨著數(shù)據(jù)庫管理平臺的功能日益強(qiáng)大,單純的記錄信息并防止記錄丟失已不再是其具備功能的全部,數(shù)據(jù)庫系統(tǒng)拓展出了許多基于關(guān)系化數(shù)據(jù)處理的其它功能。
1.Oracle數(shù)據(jù)庫的審計功能
Oracle中審計總體上可分為“標(biāo)準(zhǔn)審計”和“基于政策的審計”,在Oracle10G之后審計功能得到很大增強(qiáng)。其中標(biāo)準(zhǔn)審計可分為用戶級審計和系統(tǒng)級審計。用戶級審計是任何Oracle用戶可設(shè)置的審計,主要是用戶針對自己創(chuàng)建的數(shù)據(jù)庫表或視圖進(jìn)行審計,記錄所有用戶對這些表或視圖的一切成功或不成功的訪問要求以及各種類型的SQL操作。系統(tǒng)級審計只能由數(shù)據(jù)庫管理員設(shè)置,用以監(jiān)測成功或失敗的登錄要求、監(jiān)測GRANT和REVOKE操作以及其他數(shù)據(jù)庫級權(quán)限下的操作。
在ORACLE中分別支持以下三種標(biāo)準(zhǔn)審計類型:語句審計,對某種類型的SQL語句審計,不指定結(jié)構(gòu)或?qū)ο?,審計語句的成功執(zhí)行、不成功執(zhí)行,或者全部狀態(tài)。特權(quán)審計,對執(zhí)行相應(yīng)動作的系統(tǒng)特權(quán)的使用審計,對每一用戶會話審計語句執(zhí)行一次或者對語句每次執(zhí)行審計一次。對象審計,對一特殊模式對象上的指定語句的審計,對全部用戶或指定用戶的活動的審計。
2.Mysql高并發(fā)“秒殺”應(yīng)用
開源的MySQL其InnoSQL版本免費提供了線程池,可以保證應(yīng)用在大并發(fā)量下依舊應(yīng)用穩(wěn)定,特別是對于秒殺類的應(yīng)用,而秒殺應(yīng)用對于數(shù)據(jù)庫壓力的問題所在,即大并發(fā)量下更新同一行數(shù)據(jù)的壓力。
在秒殺進(jìn)行時,最主要是對庫存相關(guān)內(nèi)容進(jìn)行操作,在操作前可能需要插入一些其他操作,然后就是對庫存信息進(jìn)行更新。隨著并發(fā)量的增大,事務(wù)處理的性能不斷下降,因此秒殺操作雖然是并行的,但是在數(shù)據(jù)庫層面是串行的。隨著并發(fā)的不斷增加,不斷發(fā)生的鎖等待和喚醒導(dǎo)致性能的急劇下降。如果通過性能工具來查看的話,可以發(fā)現(xiàn)死鎖檢測占據(jù)了大部分的CPU時間。線程池可以在MySQL上層限制住同時運(yùn)行的事務(wù)數(shù),這樣就解決了由秒殺而導(dǎo)致的資源不足問題,應(yīng)用層做好對于單個商品購買的數(shù)量限制,MySQL數(shù)據(jù)庫層使用線程池技術(shù)來保證大并發(fā)量下的性能同時可以再調(diào)整線程池的OverSubscribe參數(shù)用來進(jìn)一步提升性能。
3.檢查是“誰”對數(shù)據(jù)數(shù)據(jù)庫進(jìn)行了操作
對于數(shù)據(jù)庫操作記錄的檢查有多種方法,可以通過數(shù)據(jù)庫的審計功能、觸發(fā)器功能和Logmnr日志這三種方法實現(xiàn)。
審計功能,先設(shè)置數(shù)據(jù)庫的audit_trail參數(shù),決定審計結(jié)果的保存地點,然后執(zhí)行audit insert on schema. table_name whenever successful;當(dāng)有執(zhí)行insert操作的動作后,根據(jù)audit_trail 參數(shù)到相應(yīng)位置去查看審計結(jié)果。
觸發(fā)器操作,建立觸發(fā)器實質(zhì)上也是審計功能的體現(xiàn),但是其單單基于值的審計,比數(shù)據(jù)庫審計所需要的時間要長一些,具體實現(xiàn)方法見下圖。
通過Logmnr日志查看,Logmnr工具可以獲得數(shù)據(jù)庫的歸檔日志文件內(nèi)容,且該工具可以分析出對于數(shù)據(jù)庫操作的語句信息等重要內(nèi)容。
(作者單位:大慶煉化公司信息中心)