賀峰 楊青豐
【摘? 要】論文介紹了第二代關(guān)系型數(shù)據(jù)庫和第三代非關(guān)系型數(shù)據(jù)庫的分類、特性和關(guān)聯(lián)概念,概述了關(guān)系型數(shù)據(jù)庫的性能優(yōu)化方向和主要優(yōu)化方法,闡述了關(guān)系型數(shù)據(jù)庫在企業(yè)級軟件中的應(yīng)用架構(gòu),介紹了關(guān)系型數(shù)據(jù)庫在云計算和大數(shù)據(jù)等新興IT技術(shù)中的應(yīng)用方式,最后簡要介紹了NoSQL數(shù)據(jù)庫的分類和應(yīng)用。
【Abstract】This paper introduces the classification, characteristics and correlative concepts of the second generation relational database and the third generation non-relational database, summarizes the performance optimization direction and main optimization methods of relational database, expounds the application architecture of relational database in enterprise software, introduces the application mode of relational database in cloud computing and big data and other emerging IT technologies, and finally briefly introduces the classification and application of NoSQL database.
【關(guān)鍵詞】計算機(jī);數(shù)據(jù)庫技術(shù);信息管理
【Keywords】computer; database technology; information management
【中圖分類號】TP311.1;TP315? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?【文獻(xiàn)標(biāo)志碼】A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?【文章編號】1673-1069(2021)12-0173-03
1 引言
數(shù)據(jù)庫是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的載體,在信息時代特指“一個長期存儲在計算機(jī)內(nèi)的、有組織的、可共享的、統(tǒng)一管理的大量數(shù)據(jù)的集合”。管理數(shù)據(jù)庫的計算機(jī)軟件稱為數(shù)據(jù)庫軟件,一般簡稱為“數(shù)據(jù)庫”。
2 數(shù)據(jù)庫分類及概述
2.1 數(shù)據(jù)庫的分類
IBM在1969年推出了第一代層次模型數(shù)據(jù)庫管理系統(tǒng)IMS,20世紀(jì)70年代DBTG又推出了網(wǎng)狀模型數(shù)據(jù)庫,其優(yōu)點是查詢效率高,但表示數(shù)據(jù)具有局限性,不太適合多對多的節(jié)點關(guān)系。
20世紀(jì)70年代開始,IBM、微軟和ORACLE等公司逐步推出了DB2、SQL Server和Oracle等關(guān)系型數(shù)據(jù)庫軟件,因為關(guān)系型數(shù)據(jù)庫嚴(yán)格基于數(shù)學(xué)基礎(chǔ),優(yōu)點是數(shù)據(jù)結(jié)構(gòu)簡單清晰、易學(xué)易用,但查詢效率不如層次或網(wǎng)狀型數(shù)據(jù)庫,因此,關(guān)系型數(shù)據(jù)庫的查詢性能調(diào)優(yōu)是數(shù)據(jù)庫技術(shù)研究和應(yīng)用的一個重點領(lǐng)域。日常辦公常用的Excel軟件也可視作一種關(guān)系型數(shù)據(jù)庫軟件。
從20世紀(jì)80年代末期開始,隨著互聯(lián)網(wǎng)特別是近年來移動互聯(lián)網(wǎng)的發(fā)展,網(wǎng)絡(luò)數(shù)據(jù)已不局限于傳統(tǒng)二維表示的結(jié)構(gòu)化數(shù)據(jù),圖片、語音、視頻等沒有預(yù)定義數(shù)據(jù)模型的非結(jié)構(gòu)化數(shù)據(jù)成為網(wǎng)絡(luò)數(shù)據(jù)的主流,第三代非關(guān)系型數(shù)據(jù)庫逐漸興起,采用“鍵-值”對、列簇或者圖結(jié)構(gòu)等方式來存儲和查找數(shù)據(jù),具有支持分布式、可擴(kuò)展性強(qiáng)和開放性好等優(yōu)點,很好地支持了人工智能、機(jī)器學(xué)習(xí)和大數(shù)據(jù)技術(shù)的各類應(yīng)用。
相比于關(guān)系型數(shù)據(jù)庫,非關(guān)系型數(shù)據(jù)庫在操作原子性、一致性、隔離性和持久性的支持能力不足,很多場合還需要依賴關(guān)系型數(shù)據(jù)庫。因此,雖然非關(guān)系型數(shù)據(jù)庫已成為今天大數(shù)據(jù)、機(jī)器學(xué)習(xí)等行業(yè)應(yīng)用的熱點,但傳統(tǒng)的關(guān)系型數(shù)據(jù)庫仍具有不可撼動的行業(yè)地位。
2.2 關(guān)系型數(shù)據(jù)庫的ACID特性
在關(guān)系型數(shù)據(jù)庫操作中,一個任務(wù)執(zhí)行單元稱為事務(wù),例如,一次數(shù)據(jù)插入或者一次數(shù)據(jù)更新,為保證數(shù)據(jù)庫事務(wù)操作的正確可靠,關(guān)系型數(shù)據(jù)庫必須具備4個特性:原子性、一致性、隔離性和持久性。
所謂原子性,是借用早期人類認(rèn)為的原子所具有的不可分割性,在數(shù)據(jù)庫中指一個事務(wù)中的所有操作,要么都成功,要么就全部不執(zhí)行。如果部分成功部分失敗,已經(jīng)成功完成的操作要進(jìn)行回滾操作,就好像沒有執(zhí)行過一樣。
所謂一致性,是指事務(wù)操作前后,數(shù)據(jù)庫的完整性不受破壞。一致性往往與數(shù)據(jù)庫的隔離性聯(lián)系起來,即多個并行處理的事務(wù)同時操作數(shù)據(jù)后,數(shù)據(jù)的完整性不受破壞,在多個并行事務(wù)中呈現(xiàn)的數(shù)據(jù)值是一致的。隔離性的主要功能就是防止多個事務(wù)并發(fā)執(zhí)行而導(dǎo)致的數(shù)據(jù)不一致問題。
所謂持久性是指事務(wù)一旦被數(shù)據(jù)庫執(zhí)行,其對數(shù)據(jù)的修改就是永久性的,不因數(shù)據(jù)庫或計算機(jī)故障而丟失。
2.3 結(jié)構(gòu)化查詢語言SQL
結(jié)構(gòu)化查詢語言(Structured Query Language)簡稱SQL,是專用于管理關(guān)系型數(shù)據(jù)庫的編程語言,用于對數(shù)據(jù)庫數(shù)據(jù)的插入、修改、刪除和查找等功能,用戶在操縱數(shù)據(jù)庫時,僅需要編寫SQL語句來指明具體操作,剩下的工作都可以由數(shù)據(jù)庫自動完成。SQL語句大大提高了數(shù)據(jù)庫管理的效率和易用性,目前所有的關(guān)系型數(shù)據(jù)庫基本上都支持標(biāo)準(zhǔn)的SQL語句,僅有極少數(shù)功能需要使用非標(biāo)準(zhǔn)的SQL語句。
SQL語言從功能上可以劃分為數(shù)據(jù)定義、數(shù)據(jù)操縱和數(shù)據(jù)控制。數(shù)據(jù)定義是指定義數(shù)據(jù)庫的三級模式結(jié)構(gòu):外模式、概念模式和內(nèi)模式。其規(guī)定了數(shù)據(jù)的物理結(jié)構(gòu)、邏輯結(jié)構(gòu)和數(shù)據(jù)視圖,如數(shù)據(jù)庫和用戶表的建立等。數(shù)據(jù)操縱指針對用戶數(shù)據(jù)表的增刪改查等具體操作。數(shù)據(jù)控制則規(guī)定了數(shù)據(jù)的訪問和使用權(quán)限。
2.4 數(shù)據(jù)庫安全
數(shù)據(jù)是現(xiàn)代社會活動的核心,也是黑客重點攻擊的方向,勒索病毒攻擊加密數(shù)據(jù)庫數(shù)據(jù),往往給企事業(yè)單位帶來重大損失,為數(shù)據(jù)庫建立可靠的防護(hù)措施是必不可少的步驟。數(shù)據(jù)庫防護(hù)的核心是數(shù)據(jù)安全,因此在數(shù)據(jù)庫的訪問控制和權(quán)限設(shè)置、用戶操作行為和審計、數(shù)據(jù)維護(hù)等方面都應(yīng)建立完備的制度和手段,如關(guān)閉不必要的網(wǎng)絡(luò)端口、最小化用戶操作權(quán)限、敏感數(shù)據(jù)加密存儲等。
3 關(guān)系型數(shù)據(jù)庫性能優(yōu)化
3.1 表結(jié)構(gòu)優(yōu)化
數(shù)據(jù)庫在建立時,就應(yīng)該進(jìn)行良好的設(shè)計,遵守數(shù)據(jù)庫設(shè)計范式。關(guān)系型數(shù)據(jù)庫有5種設(shè)計范式:第1~5范式,所有設(shè)計范式都是為了提高數(shù)據(jù)庫的使用性能和提高其可擴(kuò)展性。
第1范式要求數(shù)據(jù)表的列具有原子性,即單表每列的數(shù)據(jù)只對應(yīng)程序的一個屬性,不能是對應(yīng)多個屬性的集合;如果一定要對應(yīng)集合,應(yīng)該使用從數(shù)據(jù)表,并且從數(shù)據(jù)表的每一列也要保持原子性。第2范式要求必須在滿足第1范式的基礎(chǔ)上,表格中的每一條數(shù)據(jù)都可以被區(qū)分,不能有兩條數(shù)據(jù)完全一致。實際上,要求數(shù)據(jù)庫的每個數(shù)據(jù)表都應(yīng)設(shè)置主鍵(Primary Key),主鍵的值在單表中具有唯一性。主鍵可以是1個,若1個主鍵不滿足唯一性,則可以設(shè)置多主鍵,多主鍵的組合必須具有唯一性,但設(shè)置多主鍵會引起數(shù)據(jù)庫增加開銷,導(dǎo)致讀寫性能下降。第3范式要求必須滿足第2范式,它要求在單表中的屬性具有獨立性,互相之間不具有依賴關(guān)系,如果具有依賴關(guān)系,則應(yīng)該將所有具有依賴關(guān)系的數(shù)據(jù)列單獨劃分為一個數(shù)據(jù)表,并通過設(shè)置外鍵來表示兩張數(shù)據(jù)表之間的關(guān)聯(lián)性。在查詢數(shù)據(jù)時,可以通過左連接查詢或者右連接查詢來形成用戶需要獲得的完整數(shù)據(jù)。對于一些關(guān)聯(lián)關(guān)系特別復(fù)雜的情況,滿足第3范式可能導(dǎo)致性能下降,此時可以建立視圖,預(yù)置復(fù)雜的連接查詢,提高查詢效率。第4范式在第3范式的基礎(chǔ)上,要求消除數(shù)據(jù)表的多值依賴,即數(shù)據(jù)表中不能存在若干行多列數(shù)據(jù)完全一致的情況。第5范式在第4范式的基礎(chǔ)上,進(jìn)一步消除傳遞依賴,即多個數(shù)據(jù)列之間不能形成依賴關(guān)系鏈。但實際上,數(shù)據(jù)庫設(shè)計滿足第3范式即可,過度追求完美的第5范式,將導(dǎo)致數(shù)據(jù)表設(shè)計過于復(fù)雜、零散,不利于實際使用,在數(shù)據(jù)量過大時,反而會引起數(shù)據(jù)庫查詢性能下降。
3.2 并發(fā)性能優(yōu)化
①單機(jī)并發(fā)能力優(yōu)化主要目標(biāo)是提高單數(shù)據(jù)庫的并發(fā)能力。實際上,大型數(shù)據(jù)庫一般都有單獨的服務(wù)器,首先,確保所有計算機(jī)資源都用于數(shù)據(jù)庫服務(wù);其次,提高存儲數(shù)據(jù)庫文件的計算機(jī)硬盤I/O能力,如將機(jī)械硬盤改為固態(tài)硬盤;再次,提高網(wǎng)絡(luò)帶寬和QoS服務(wù)質(zhì)量,降低網(wǎng)絡(luò)傳輸時延和時延抖動;最后,優(yōu)化數(shù)據(jù)庫的連接池,合理設(shè)置連接池的大小、等待時間、保持時間和檢測參數(shù)等。②部署優(yōu)化主要指應(yīng)用分布式部署來提高數(shù)據(jù)庫的并發(fā)性能。一是可以對數(shù)據(jù)表進(jìn)行橫向分裂,將數(shù)據(jù)表數(shù)據(jù)按特定規(guī)則排序后,橫向拆分到不同的數(shù)據(jù)庫服務(wù)器上,即通過數(shù)據(jù)分庫來提高并發(fā)服務(wù)能力。二是針對并發(fā)讀寫沖突的問題,通過分布式服務(wù)器實現(xiàn)讀寫分離:先在后端構(gòu)建一個主從同步數(shù)據(jù)庫集群,將主數(shù)據(jù)庫數(shù)據(jù)自動同步到從數(shù)據(jù)庫,在前端服務(wù)器部署讀寫控制器。當(dāng)要寫數(shù)據(jù)時,由控制器向主數(shù)據(jù)庫發(fā)起寫請求,主數(shù)據(jù)庫完成事務(wù)操作后,再將相同的操作同步到從服務(wù)器,實現(xiàn)主從數(shù)據(jù)同步;當(dāng)要讀數(shù)據(jù)時,前端控制器直接到從數(shù)據(jù)庫讀取數(shù)據(jù)。如果進(jìn)一步對主數(shù)據(jù)庫和從數(shù)據(jù)庫進(jìn)行分庫,還能繼續(xù)提高數(shù)據(jù)庫集群的并發(fā)服務(wù)能力。讀寫分離的優(yōu)點不僅在于提高了系統(tǒng)的讀寫并發(fā)能力,而且實現(xiàn)了數(shù)據(jù)的冗余備份,提高了數(shù)據(jù)的可靠性,如圖1所示。
3.3 SQL語句優(yōu)化
數(shù)據(jù)庫的性能主要體現(xiàn)為操作響應(yīng)時間,在使用SQL語句查詢時,也需要根據(jù)查詢目標(biāo)進(jìn)行優(yōu)化:①避免“select * ”這樣的全局查詢和使用“l(fā)ike”關(guān)鍵字的模糊查詢,這種查詢方式需要進(jìn)行全表掃描,對于列數(shù)較多且數(shù)據(jù)量巨大的表來說將消耗大量系統(tǒng)資源,造成系統(tǒng)響應(yīng)時間將顯著延長。②縮小查詢范圍,通過where字句、between等范圍關(guān)鍵字和分頁查詢等方式,縮小查詢范圍。使用子查詢時,應(yīng)將查詢范圍最小的查詢語句寫在最內(nèi)層,這樣可以快速縮小查詢范圍,降低后續(xù)子查詢的難度。③連接查詢時,使用數(shù)據(jù)量較小的表去連接查詢數(shù)據(jù)量大的表,同時可以在連接的字段上建立索引,可進(jìn)一步提高查詢效率。
SQL語句是影響數(shù)據(jù)庫性能的重要因素,數(shù)據(jù)庫大部分?jǐn)?shù)據(jù)訪問都屬于查詢操作,不合理的查詢操作甚至有可能阻塞數(shù)據(jù)庫的其他查詢服務(wù),因此,SQL語句執(zhí)行查詢操作時必須要優(yōu)化查詢效能。
4 關(guān)系型數(shù)據(jù)庫的應(yīng)用
4.1 在傳統(tǒng)企業(yè)級軟件中的應(yīng)用
數(shù)據(jù)庫是企業(yè)級軟件必不可少的核心組成部分,企業(yè)級軟件的核心架構(gòu)是依據(jù)數(shù)據(jù)庫結(jié)構(gòu)來設(shè)計和確定的,后臺業(yè)務(wù)核心邏輯就是對數(shù)據(jù)的運用、分析和持久化。以ERP、CRP等軟件為代表的企業(yè)級軟件,以結(jié)構(gòu)化數(shù)據(jù)管理為主,基本都采用關(guān)系型數(shù)據(jù)庫作為持久化存儲軟件。業(yè)界主流的企業(yè)級關(guān)系型數(shù)據(jù)庫有MySQL、MariaDB、Postgre SQL、SQL Server和Oracle等。近年來,隨著自主軟件的發(fā)展和信息安全要求,國產(chǎn)數(shù)據(jù)庫管理軟件也在興起,如南大通用、武漢達(dá)夢、華為高斯等。
由于軟件功能具有不確定性,隨著企業(yè)業(yè)務(wù)發(fā)展和社會需求變遷,軟件功能也在不斷發(fā)生變化。但是數(shù)據(jù)庫的表結(jié)構(gòu)一旦確定并在實際運行中寫入大量數(shù)據(jù),是很難隨著軟件功能隨意變化的,一般僅在必要的情況下才會更改已形成的表結(jié)構(gòu),此時需要有專門的表結(jié)構(gòu)升級腳本,操作煩瑣且風(fēng)險巨大,一旦因斷電或其他意外原因造成升級失敗又不能回滾,將給軟件客戶造成極大損失,因此,在企業(yè)級軟件體系中,往往設(shè)置持久化中間層來兼容軟件功能變化對數(shù)據(jù)庫的影響,如圖2所示。
持久層通過實體類與數(shù)據(jù)庫的數(shù)據(jù)表建立映射關(guān)系,例如,在Java中可以通過XML或者注解的方式,在Java實體類與數(shù)據(jù)庫表之間建立一對一映射關(guān)系,由持久化層來維護(hù)與數(shù)據(jù)庫的連接和訪問操作請求,并向上層業(yè)務(wù)邏輯代碼提供API(應(yīng)用可編程接口)。對數(shù)據(jù)庫表的增刪改查操作,簡化為通過持久化層提供的API來操作實體類,由持久層將相應(yīng)的操作轉(zhuǎn)換為SQL語句去操作數(shù)據(jù)庫,而不是程序代碼直接通過SQL語句去訪問數(shù)據(jù)庫。在這種應(yīng)用模式下,數(shù)據(jù)庫不直接與軟件業(yè)務(wù)邏輯代碼發(fā)生關(guān)系,持久化層向業(yè)務(wù)邏輯代碼屏蔽了不同廠商數(shù)據(jù)庫的不一致性,提高了程序的可移植性,向數(shù)據(jù)庫屏蔽了業(yè)務(wù)邏輯字段頻繁變化對數(shù)據(jù)庫的沖擊,有利于提高軟件和數(shù)據(jù)庫的穩(wěn)定性。
4.2 在云計算和大數(shù)據(jù)體系中的應(yīng)用
對于開源云計算管理平臺OpenStack來說,MariaDB或者其他關(guān)系型數(shù)據(jù)庫是部署云計算平臺必不可少的基礎(chǔ)環(huán)境,Nova、Glance和Keystone等組件都依賴數(shù)據(jù)庫存放系統(tǒng)管理必要的結(jié)構(gòu)化數(shù)據(jù),一旦數(shù)據(jù)庫遭到攻擊,極有可能導(dǎo)致整個云計算系統(tǒng)崩潰。
基于開源大數(shù)據(jù)處理平臺Hadoop的數(shù)據(jù)倉庫工具Hive,則可以視作大數(shù)據(jù)版本的關(guān)系型數(shù)據(jù)庫。Hive將結(jié)構(gòu)化數(shù)據(jù)文件映射為數(shù)據(jù)庫表,通過Hive SQL可以將SQL查詢語句轉(zhuǎn)換為MapReduce程序來執(zhí)行大數(shù)據(jù)查找和分析,它借鑒了關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)并結(jié)合Hadoop的MapReduce工具,實現(xiàn)了對海量關(guān)系型數(shù)據(jù)的離線查詢。
5 NoSQL數(shù)據(jù)庫的分類和應(yīng)用
互聯(lián)網(wǎng)和移動互聯(lián)網(wǎng)的發(fā)展催生了無數(shù)應(yīng)用模式,微博、網(wǎng)購、外賣、抖音和移動社交網(wǎng)絡(luò)等應(yīng)用產(chǎn)生了各種不同類型的非結(jié)構(gòu)化數(shù)據(jù)以及對應(yīng)的數(shù)據(jù)應(yīng)用,非關(guān)系型數(shù)據(jù)庫發(fā)展了多個分支來適應(yīng)這種需求。①“鍵值對”型數(shù)據(jù)庫,這類數(shù)據(jù)庫基于哈希算法構(gòu)建哈希表,通過將一個特定的“鍵”和“數(shù)據(jù)”進(jìn)行綁定來實現(xiàn)數(shù)據(jù)管理,優(yōu)點是簡單易部署,單數(shù)據(jù)查詢效率高,但是批量數(shù)據(jù)查詢效率低下,常用于大型網(wǎng)站的分布式緩存,如Redis等。②列存儲數(shù)據(jù)庫,主要用于海量數(shù)據(jù)存儲。傳統(tǒng)關(guān)系型數(shù)據(jù)庫是行存儲數(shù)據(jù)庫,特點是以“行”為單位來管理和使用數(shù)據(jù)。大數(shù)據(jù)處理往往有選擇的處理數(shù)據(jù)的部分維度,如微博詞頻統(tǒng)計、評論分析等,此時列存儲更有利于數(shù)據(jù)快速讀取。列存儲更有利于數(shù)據(jù)讀取,不利于數(shù)據(jù)插入、更新和刪除等操作,同時列數(shù)據(jù)的重復(fù)性更有利于數(shù)據(jù)壓縮。因此,列存儲主要用于大數(shù)據(jù)領(lǐng)域,如HBase等。③文檔數(shù)據(jù)庫與“鍵值對”數(shù)據(jù)庫類似,其以特定的格式來存儲文檔信息,如Json、XML等,其更高級的功能是允許鍵值嵌套,常用于網(wǎng)頁數(shù)據(jù)、表單數(shù)據(jù)處理。④圖型數(shù)據(jù)庫適用于多對多類型的數(shù)據(jù)存儲,如微博、微信等社交網(wǎng)絡(luò)數(shù)據(jù)。圖形數(shù)據(jù)庫一般由結(jié)點集和結(jié)點關(guān)系集兩部分組成,其查找算法需要特殊定制,但在近年興起的知識圖譜和較早應(yīng)用的專家推薦系統(tǒng)中應(yīng)用較為廣泛。
6 結(jié)語
隨著互聯(lián)網(wǎng)技術(shù)的深入發(fā)展,網(wǎng)絡(luò)資源形式愈加豐富,非關(guān)系型數(shù)據(jù)庫已經(jīng)成為新一代網(wǎng)絡(luò)應(yīng)用的主流,但仍然不能放棄傳統(tǒng)的關(guān)系型數(shù)據(jù)庫。當(dāng)前網(wǎng)絡(luò)行業(yè)依然存在海量的結(jié)構(gòu)化數(shù)據(jù)存儲需求,并且隨著非結(jié)構(gòu)化數(shù)據(jù)的增長,與之相對應(yīng)的結(jié)構(gòu)化數(shù)據(jù)也將保持同步增長,關(guān)系型數(shù)據(jù)庫在未來仍將保持旺盛的生命力,與非關(guān)系型數(shù)據(jù)庫同步發(fā)展。
【參考文獻(xiàn)】
【1】王珊,薩師煊.數(shù)據(jù)庫系統(tǒng)概論(第5版)[M].北京:高等教育出版社,2014.
【2】姜明俊.分布式關(guān)系數(shù)據(jù)庫事務(wù)管理器的設(shè)計與實現(xiàn)[D].南京:東南大學(xué),2019.
【3】李小蓮.對數(shù)據(jù)庫范式的分析與應(yīng)用[J].電腦知識與技術(shù),2018,14(8):7-8,16.
【4】楊鍵.分布式關(guān)系型數(shù)據(jù)庫查詢方法優(yōu)化與實現(xiàn)[D].成都:電子科技大學(xué),2021.