一、什么是數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)是“按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù)”。是一個(gè)長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)內(nèi)的、有組織的、可共享的、統(tǒng)一管理的大量數(shù)據(jù)的集合。
數(shù)據(jù)庫(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ā)送的消息等等。除了文本類(lèi)型的數(shù)據(jù),圖像、音樂(lè)、聲音都是數(shù)據(jù)。
數(shù)據(jù)庫(kù)的概念實(shí)際包括兩層意思:
1、數(shù)據(jù)庫(kù)是一個(gè)實(shí)體,它是能夠合理保管數(shù)據(jù)的“倉(cāng)庫(kù)”,用戶在該“倉(cāng)庫(kù)”中存放要管理的事務(wù)數(shù)據(jù),“數(shù)據(jù)”和“庫(kù)”兩個(gè)概念結(jié)合成為數(shù)據(jù)庫(kù)。
2、數(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)行的基石。
二、數(shù)據(jù)庫(kù)有哪些類(lèi)型
數(shù)據(jù)庫(kù)有兩種類(lèi)型,分別是關(guān)系型數(shù)據(jù)庫(kù)與非關(guān)系型數(shù)據(jù)庫(kù)。
1、關(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ù)。
關(guān)系型數(shù)據(jù)庫(kù)對(duì)于結(jié)構(gòu)化數(shù)據(jù)的處理更合適,如學(xué)生成績(jī)、地址等,這樣的數(shù)據(jù)一般情況下需要使用結(jié)構(gòu)化的查詢,例如join,這樣的情況下,關(guān)系型數(shù)據(jù)庫(kù)就會(huì)比NoSQL數(shù)據(jù)庫(kù)性能更優(yōu),而且精確度更高。由于結(jié)構(gòu)化數(shù)據(jù)的規(guī)模不算太大,數(shù)據(jù)規(guī)模的增長(zhǎng)通常也是可預(yù)期的,所以針對(duì)結(jié)構(gòu)化數(shù)據(jù)使用關(guān)系型數(shù)據(jù)庫(kù)更好。關(guān)系型數(shù)據(jù)庫(kù)十分注意數(shù)據(jù)操作的事務(wù)性、一致性,如果對(duì)這方面的要求關(guān)系型數(shù)據(jù)庫(kù)無(wú)疑可以很好的滿足。
2、非關(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ì)。
NoSQL數(shù)據(jù)庫(kù)指的是分布式的、非關(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)行精確查詢,而且這類(lèi)數(shù)據(jù)的數(shù)據(jù)規(guī)模往往是海量的,數(shù)據(jù)規(guī)模的增長(zhǎng)往往也是不可能預(yù)期的,而NoSQL數(shù)據(jù)庫(kù)的擴(kuò)展能力幾乎也是無(wú)限的,所以NoSQL數(shù)據(jù)庫(kù)可以很好的滿足這一類(lèi)數(shù)據(jù)的存儲(chǔ)。NoSQL數(shù)據(jù)庫(kù)利用key-value可以大量的獲取大量的非結(jié)構(gòu)化數(shù)據(jù),并且數(shù)據(jù)的獲取效率很高,但用它查詢結(jié)構(gòu)化數(shù)據(jù)效果就比較差。
目前NoSQL數(shù)據(jù)庫(kù)仍然沒(méi)有一個(gè)統(tǒng)一的標(biāo)準(zhǔn),它現(xiàn)在有四種大的分類(lèi):
(1)鍵值對(duì)存儲(chǔ)(key-value):代表軟件Redis,它的優(yōu)點(diǎn)能夠進(jìn)行數(shù)據(jù)的快速查詢,而缺點(diǎn)是需要存儲(chǔ)數(shù)據(jù)之間的關(guān)系。
(2)列存儲(chǔ):代表軟件Hbase,它的優(yōu)點(diǎn)是對(duì)數(shù)據(jù)能快速查詢,數(shù)據(jù)存儲(chǔ)的擴(kuò)展性強(qiáng)。而缺點(diǎn)是數(shù)據(jù)庫(kù)的功能有局限性。
(3)文檔數(shù)據(jù)庫(kù)存儲(chǔ):代表軟件MongoDB,它的優(yōu)點(diǎn)是對(duì)數(shù)據(jù)結(jié)構(gòu)要求不特別的嚴(yán)格。而缺點(diǎn)是查詢性的性能不好,同時(shí)缺少一種統(tǒng)一查詢語(yǔ)言。
(4)圖形數(shù)據(jù)庫(kù)存儲(chǔ):代表軟件InfoGrid,它的優(yōu)點(diǎn)可以方便的利用圖結(jié)構(gòu)相關(guān)算法進(jìn)行計(jì)算。而缺點(diǎn)是要想得到結(jié)果必須進(jìn)行整個(gè)圖的計(jì)算,而且遇到不適合的數(shù)據(jù)模型時(shí),圖形數(shù)據(jù)庫(kù)很難使用。