一、數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)管理系統(tǒng)的關(guān)系
數(shù)據(jù)庫(kù)管理系統(tǒng)(Database Management System,DBMS)是指用于管理數(shù)據(jù)庫(kù)的軟件系統(tǒng),負(fù)責(zé)實(shí)現(xiàn)數(shù)據(jù)庫(kù)中數(shù)據(jù)的組織、儲(chǔ)存、查詢、修改和刪除等基本操作。數(shù)據(jù)庫(kù)管理系統(tǒng)是數(shù)據(jù)庫(kù)系統(tǒng)的核心組成部分,它是介于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,是用戶和數(shù)據(jù)庫(kù)的接口,用于協(xié)調(diào)和管理數(shù)據(jù)庫(kù)中的數(shù)據(jù)和操作。而數(shù)據(jù)庫(kù)是數(shù)據(jù)庫(kù)管理系統(tǒng)的主要對(duì)象。
二、數(shù)據(jù)庫(kù)與數(shù)據(jù)庫(kù)系統(tǒng)的關(guān)系
數(shù)據(jù)庫(kù)系統(tǒng)(Database System)則是指數(shù)據(jù)庫(kù)及其管理軟件,同時(shí)還涉及到一些與數(shù)據(jù)庫(kù)相關(guān)的硬件、網(wǎng)絡(luò)、安全等方面的技術(shù),是一個(gè)更加全面的概念。數(shù)據(jù)庫(kù)系統(tǒng)是由數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)和相應(yīng)的應(yīng)用程序組成的。數(shù)據(jù)庫(kù)系統(tǒng)是實(shí)現(xiàn)應(yīng)用程序和數(shù)據(jù)之間交互和數(shù)據(jù)的存儲(chǔ)、管理、維護(hù)、保護(hù)等的一個(gè)整體系統(tǒng)。數(shù)據(jù)庫(kù)是在數(shù)據(jù)庫(kù)系統(tǒng)中使用的數(shù)據(jù)集合。
三、數(shù)據(jù)庫(kù)介紹
1、定義
數(shù)據(jù)庫(kù)是存放數(shù)據(jù)的倉(cāng)庫(kù)。它的存儲(chǔ)空間很大,可以存放百萬(wàn)條、千萬(wàn)條、上億條數(shù)據(jù)。但是數(shù)據(jù)庫(kù)并不是隨意地將數(shù)據(jù)進(jìn)行存放,是有一定的規(guī)則的,否則查詢的效率會(huì)很低。當(dāng)今世界是一個(gè)充滿著數(shù)據(jù)的互聯(lián)網(wǎng)世界,充斥著大量的數(shù)據(jù)。即這個(gè)互聯(lián)網(wǎng)世界就是數(shù)據(jù)世界。數(shù)據(jù)的來(lái)源有很多,比如出行記錄、消費(fèi)記錄、瀏覽的網(wǎng)頁(yè)、發(fā)送的消息等等。除了文本類型的數(shù)據(jù),圖像、音樂(lè)、聲音都是數(shù)據(jù)。
數(shù)據(jù)庫(kù)是一個(gè)按數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)和管理數(shù)據(jù)的計(jì)算機(jī)軟件系統(tǒng)。數(shù)據(jù)庫(kù)的概念實(shí)際包括兩層意思:
數(shù)據(jù)庫(kù)是一個(gè)實(shí)體,它是能夠合理保管數(shù)據(jù)的“倉(cāng)庫(kù)”,用戶在該“倉(cāng)庫(kù)”中存放要管理的事務(wù)數(shù)據(jù),“數(shù)據(jù)”和“庫(kù)”兩個(gè)概念結(jié)合成為數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)是數(shù)據(jù)管理的新方法和技術(shù),它能更合適的組織數(shù)據(jù)、更方便的維護(hù)數(shù)據(jù)、更嚴(yán)密的控制數(shù)據(jù)和更有效的利用數(shù)據(jù)。數(shù)據(jù)庫(kù)作為最重要的基礎(chǔ)軟件,是確保計(jì)算機(jī)系統(tǒng)穩(wěn)定運(yùn)行的基石。
2、發(fā)展現(xiàn)狀
在數(shù)據(jù)庫(kù)的發(fā)展歷史上,數(shù)據(jù)庫(kù)先后經(jīng)歷了層次數(shù)據(jù)庫(kù)、網(wǎng)狀數(shù)據(jù)庫(kù)和關(guān)系數(shù)據(jù)庫(kù)等各個(gè)階段的發(fā)展,數(shù)據(jù)庫(kù)技術(shù)在各個(gè)方面的快速的發(fā)展。特別是關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)成為目前數(shù)據(jù)庫(kù)產(chǎn)品中最重要的一員,80年代以來(lái), 幾乎所有的數(shù)據(jù)庫(kù)廠商新出的數(shù)據(jù)庫(kù)產(chǎn)品都支持關(guān)系型數(shù)據(jù)庫(kù),即使一些非關(guān)系數(shù)據(jù)庫(kù)產(chǎn)品也幾乎都有支持關(guān)系數(shù)據(jù)庫(kù)的接口。這主要是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)可以比較好的解決管理和存儲(chǔ)關(guān)系型數(shù)據(jù)的問(wèn)題。隨著云計(jì)算的發(fā)展和大數(shù)據(jù)時(shí)代的到來(lái),關(guān)系型數(shù)據(jù)庫(kù)越來(lái)越無(wú)法滿足需要,這主要是由于越來(lái)越多的半關(guān)系型和非關(guān)系型數(shù)據(jù)需要用數(shù)據(jù)庫(kù)進(jìn)行存儲(chǔ)管理,以此同時(shí),分布式技術(shù)等新技術(shù)的出現(xiàn)也對(duì)數(shù)據(jù)庫(kù)的技術(shù)提出了新的要求,于是越來(lái)越多的非關(guān)系型數(shù)據(jù)庫(kù)就開(kāi)始出現(xiàn),這類數(shù)據(jù)庫(kù)與傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)在設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)有了很大的不同, 它們更強(qiáng)調(diào)數(shù)據(jù)庫(kù)數(shù)據(jù)的高并發(fā)讀寫(xiě)和存儲(chǔ)大數(shù)據(jù),這類數(shù)據(jù)庫(kù)一般被稱為NoSQL(Not only SQL)數(shù)據(jù)庫(kù)。 而傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)在一些傳統(tǒng)領(lǐng)域依然保持了強(qiáng)大的生命力。
3、數(shù)據(jù)庫(kù)管理系統(tǒng)
數(shù)據(jù)庫(kù)管理系統(tǒng)是為管理數(shù)據(jù)庫(kù)而設(shè)計(jì)的電腦軟件系統(tǒng),一般具有存儲(chǔ)、截取、安全保障、備份等基礎(chǔ)功能。數(shù)據(jù)庫(kù)管理系統(tǒng)可以依據(jù)它所支持的數(shù)據(jù)庫(kù)模型來(lái)作分類,例如關(guān)系式、XML;或依據(jù)所支持的計(jì)算機(jī)類型來(lái)作分類,例如服務(wù)器群集、移動(dòng)電話;或依據(jù)所用查詢語(yǔ)言來(lái)作分類,例如SQL、XQuery;或依據(jù)性能沖量重點(diǎn)來(lái)作分類,例如最大規(guī)模、較高運(yùn)行速度;亦或其他的分類方式。不論使用哪種分類方式,一些DBMS能夠跨類別,例如,同時(shí)支持多種查詢語(yǔ)言。?
數(shù)據(jù)庫(kù)管理系統(tǒng)是數(shù)據(jù)庫(kù)系統(tǒng)的核心組成部分,主要完成對(duì)數(shù)據(jù)庫(kù)的操作與管理功能,實(shí)現(xiàn)數(shù)據(jù)庫(kù)對(duì)象的創(chuàng)建、數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的查詢、添加、修改與刪除操作和數(shù)據(jù)庫(kù)的用戶管理、權(quán)限管理等。它的安全直接關(guān)系到整個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的安全,其防護(hù)手段主要有:
使用正版數(shù)據(jù)庫(kù)管理系統(tǒng)并及時(shí)安裝相關(guān)補(bǔ)丁。做好用戶賬戶管理,禁用默認(rèn)超級(jí)管理員賬戶或者為超級(jí)管理員賬戶設(shè)置復(fù)雜密碼;為應(yīng)用程序分別分配專用賬戶進(jìn)行訪問(wèn);設(shè)置用戶登錄時(shí)間及登錄失敗次數(shù)限制, 防止暴力破解用戶密碼。分配用戶訪問(wèn)權(quán)限時(shí),堅(jiān)持最小權(quán)限分配原則,并限制用戶只能訪問(wèn)特定數(shù)據(jù)庫(kù),不能同時(shí)訪問(wèn)其他數(shù)據(jù)庫(kù)。修改數(shù)據(jù)庫(kù)默認(rèn)訪問(wèn)端口,使用防火墻屏蔽掉對(duì) 外開(kāi)放的其他端口,禁止一切外部的端口探測(cè)行為。對(duì)數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)的重要數(shù)據(jù)、敏感數(shù)據(jù)進(jìn)行加密存儲(chǔ),防止數(shù)據(jù)庫(kù)備份或數(shù)據(jù)文件被盜而造成數(shù)據(jù)泄露。設(shè)置好數(shù)據(jù)庫(kù)的備份策略,保證數(shù)據(jù)庫(kù)被破壞后能迅速恢復(fù)。對(duì)數(shù)據(jù)庫(kù)內(nèi)的系統(tǒng)存儲(chǔ)過(guò)程進(jìn)行合理管理,禁用掉不必要的存儲(chǔ)過(guò)程,防止利用存儲(chǔ)過(guò)程進(jìn)行數(shù)據(jù)庫(kù)探測(cè)與攻擊。啟用數(shù)據(jù)庫(kù)審核功能,對(duì)數(shù)據(jù)庫(kù)進(jìn)行全面的事件跟蹤和日志記錄。4、關(guān)系型數(shù)據(jù)庫(kù)
關(guān)系型數(shù)據(jù)庫(kù),存儲(chǔ)的格式可以直觀地反映實(shí)體間的關(guān)系。關(guān)系型數(shù)據(jù)庫(kù)和常見(jiàn)的表格比較相似,關(guān)系型數(shù)據(jù)庫(kù)中表與表之間是有很多復(fù)雜的關(guān)聯(lián)關(guān)系的。 常見(jiàn)的關(guān)系型數(shù)據(jù)庫(kù)有Mysql,SqlServer等。在輕量或者小型的應(yīng)用中,使用不同的關(guān)系型數(shù)據(jù)庫(kù)對(duì)系統(tǒng)的性能影響不大,但是在構(gòu)建大型應(yīng)用時(shí),則需要根據(jù)應(yīng)用的業(yè)務(wù)需求和性能需求,選擇合適的關(guān)系型數(shù)據(jù)庫(kù)。
5、非關(guān)系型數(shù)據(jù)庫(kù)(NoSQL)
隨著近些年技術(shù)方向的不斷拓展,大量的NoSql數(shù)據(jù)庫(kù)如MongoDB、Redis、Memcache出于簡(jiǎn)化數(shù)據(jù)庫(kù)結(jié)構(gòu)、避免冗余、影響性能的表連接、摒棄復(fù)雜分布式的目的被設(shè)計(jì)。
指的是分布式的、非關(guān)系型的、不保證遵循ACID原則的數(shù)據(jù)存儲(chǔ)系統(tǒng)。NoSQL數(shù)據(jù)庫(kù)技術(shù)與CAP理論、一致性哈希算法有密切關(guān)系。所謂CAP理論,簡(jiǎn)單來(lái)說(shuō)就是一個(gè)分布式系統(tǒng)不可能滿足可用性、一致性與分區(qū)容錯(cuò)性這三個(gè)要求,一次性滿足兩種要求是該系統(tǒng)的上限。而一致性哈希算法則指的是NoSQL數(shù)據(jù)庫(kù)在應(yīng)用過(guò)程中,為滿足工作需求而在通常情況下產(chǎn)生的一種數(shù)據(jù)算法,該算法能有效解決工作方面的諸多問(wèn)題但也存在弊端,即工作完成質(zhì)量會(huì)隨著節(jié)點(diǎn)的變化而產(chǎn)生波動(dòng),當(dāng)節(jié)點(diǎn)過(guò)多時(shí),相關(guān)工作結(jié)果就無(wú)法那么準(zhǔn)確。這一問(wèn)題使整個(gè)系統(tǒng)的工作效率受到影響,導(dǎo)致整個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)亂碼與出錯(cuò)率大大提高,甚至?xí)霈F(xiàn)數(shù)據(jù)節(jié)點(diǎn)的內(nèi)容遷移,產(chǎn)生錯(cuò)誤的代碼信息。但盡管如此,NoSQL數(shù)據(jù)庫(kù)技術(shù)還是具有非常明顯的應(yīng)用優(yōu)勢(shì),如數(shù)據(jù)庫(kù)結(jié)構(gòu)相對(duì)簡(jiǎn)單,在大數(shù)據(jù)量下的讀寫(xiě)性能好;能滿足隨時(shí)存儲(chǔ)自定義數(shù)據(jù)格式需求,非常適用于大數(shù)據(jù)處理工作。
NoSQL數(shù)據(jù)庫(kù)適合追求速度和可擴(kuò)展性、業(yè)務(wù)多變的應(yīng)用場(chǎng)景。對(duì)于非結(jié)構(gòu)化數(shù)據(jù)的處理更合適,如文章、評(píng)論,這些數(shù)據(jù)如全文搜索、機(jī)器學(xué)習(xí)通常只用于模糊處理,并不需要像結(jié)構(gòu)化數(shù)據(jù)一樣,進(jìn)行精確查詢,而且這類數(shù)據(jù)的數(shù)據(jù)規(guī)模往往是海量的,數(shù)據(jù)規(guī)模的增長(zhǎng)往往也是不可能預(yù)期的,而NoSQL數(shù)據(jù)庫(kù)的擴(kuò)展能力幾乎也是無(wú)限的,所以NoSQL數(shù)據(jù)庫(kù)可以很好的滿足這一類數(shù)據(jù)的存儲(chǔ)。NoSQL數(shù)據(jù)庫(kù)利用key-value可以大量的獲取大量的非結(jié)構(gòu)化數(shù)據(jù),并且數(shù)據(jù)的獲取效率很高,但用它查詢結(jié)構(gòu)化數(shù)據(jù)效果就比較差。
延伸閱讀1:分布式數(shù)據(jù)庫(kù)
所謂的分布式數(shù)據(jù)庫(kù)技術(shù),就是結(jié)合了數(shù)據(jù)庫(kù)技術(shù)與分布式技術(shù)的一種結(jié)合。具體指的是把那些在地理意義上分散開(kāi)的各個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn),但在計(jì)算機(jī)系統(tǒng)邏輯上又是屬于同一個(gè)系統(tǒng)的數(shù)據(jù)結(jié)合起來(lái)的一種數(shù)據(jù)庫(kù)技術(shù)。既有著數(shù)據(jù)庫(kù)間的協(xié)調(diào)性也有著數(shù)據(jù)的分布性。這個(gè)系統(tǒng)并不注重系統(tǒng)的集中控制,而是注重每個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)的自治性,此外為了讓程序員能夠在編寫(xiě)程序時(shí)可以減輕工作量以及系統(tǒng)出錯(cuò)的可能性,一般都是完全不考慮數(shù)據(jù)的分布情況,這樣的結(jié)果就使得系統(tǒng)數(shù)據(jù)的分布情況一直保持著透明性。