一、什么是數據庫
數據庫是(shi)“按(an)照數據(ju)結(jie)構來組織、存(cun)儲和管(guan)(guan)理(li)數據(ju)的(de)(de)倉庫”。是(shi)一個(ge)長期(qi)存(cun)儲在計算機(ji)內的(de)(de)、有(you)組織的(de)(de)、可共享的(de)(de)、統一管(guan)(guan)理(li)的(de)(de)大量數據(ju)的(de)(de)集(ji)合(he)。
數(shu)(shu)據(ju)(ju)庫的(de)(de)(de)存(cun)儲空間很(hen)大,可(ke)以(yi)存(cun)放(fang)百萬(wan)條、千萬(wan)條、上億條數(shu)(shu)據(ju)(ju)。但是(shi)(shi)數(shu)(shu)據(ju)(ju)庫并不是(shi)(shi)隨意(yi)地將數(shu)(shu)據(ju)(ju)進行(xing)存(cun)放(fang),是(shi)(shi)有一(yi)定的(de)(de)(de)規則的(de)(de)(de),否則查(cha)詢(xun)的(de)(de)(de)效率(lv)會很(hen)低。當今世界(jie)(jie)是(shi)(shi)一(yi)個充(chong)滿(man)著數(shu)(shu)據(ju)(ju)的(de)(de)(de)互聯(lian)網(wang)世界(jie)(jie),充(chong)斥(chi)著大量的(de)(de)(de)數(shu)(shu)據(ju)(ju)。即這(zhe)個互聯(lian)網(wang)世界(jie)(jie)就是(shi)(shi)數(shu)(shu)據(ju)(ju)世界(jie)(jie)。數(shu)(shu)據(ju)(ju)的(de)(de)(de)來源有很(hen)多,比如出(chu)行(xing)記錄、消費記錄、瀏覽的(de)(de)(de)網(wang)頁(ye)、發送的(de)(de)(de)消息等等。除(chu)了文本類型的(de)(de)(de)數(shu)(shu)據(ju)(ju),圖像、音樂、聲音都是(shi)(shi)數(shu)(shu)據(ju)(ju)。
數(shu)據庫的概(gai)念(nian)實際包括(kuo)兩(liang)層意思:
1、數(shu)(shu)據庫是(shi)一個實(shi)體,它是(shi)能(neng)夠(gou)合(he)理保管數(shu)(shu)據的(de)“倉(cang)庫”,用戶在該“倉(cang)庫”中存放(fang)要管理的(de)事務(wu)數(shu)(shu)據,“數(shu)(shu)據”和“庫”兩個概念結合(he)成為數(shu)(shu)據庫。
2、數(shu)據庫(ku)是數(shu)據管(guan)理的新(xin)方法和(he)技(ji)術,它能更合適的組織數(shu)據、更方便的維(wei)護數(shu)據、更嚴密(mi)的控(kong)制數(shu)據和(he)更有(you)效的利用數(shu)據。
數據庫作為最重要的基礎軟件,是確保計(ji)算機系統穩定運行的基石。
二、數據庫有哪些類型
數據(ju)庫有兩種類型,分別是(shi)關系型數據(ju)庫與非(fei)關系型數據(ju)庫。
1、關系數據庫
關(guan)系(xi)(xi)型(xing)數據(ju)(ju)庫(ku)(ku),存(cun)儲(chu)的(de)格式可以直觀地反映實(shi)體間(jian)的(de)關(guan)系(xi)(xi)。關(guan)系(xi)(xi)型(xing)數據(ju)(ju)庫(ku)(ku)和(he)常(chang)見的(de)表格比較相似,關(guan)系(xi)(xi)型(xing)數據(ju)(ju)庫(ku)(ku)中表與表之(zhi)間(jian)是(shi)有(you)很(hen)多復雜的(de)關(guan)聯關(guan)系(xi)(xi)的(de)。常(chang)見的(de)關(guan)系(xi)(xi)型(xing)數據(ju)(ju)庫(ku)(ku)有(you)Mysql,SqlServer等。在輕量(liang)或(huo)者(zhe)小型(xing)的(de)應(ying)(ying)用中,使(shi)用不(bu)(bu)同的(de)關(guan)系(xi)(xi)型(xing)數據(ju)(ju)庫(ku)(ku)對系(xi)(xi)統(tong)的(de)性(xing)(xing)能影響不(bu)(bu)大,但(dan)是(shi)在構建大型(xing)應(ying)(ying)用時,則需要根據(ju)(ju)應(ying)(ying)用的(de)業務需求(qiu)和(he)性(xing)(xing)能需求(qiu),選擇合適的(de)關(guan)系(xi)(xi)型(xing)數據(ju)(ju)庫(ku)(ku)。
關(guan)系(xi)型數(shu)(shu)(shu)據(ju)庫(ku)對于結(jie)(jie)構(gou)(gou)化數(shu)(shu)(shu)據(ju)的(de)(de)(de)處理更(geng)(geng)合適(shi),如(ru)學(xue)生成績(ji)、地(di)址等(deng),這樣的(de)(de)(de)數(shu)(shu)(shu)據(ju)一般情況下需(xu)要使(shi)用結(jie)(jie)構(gou)(gou)化的(de)(de)(de)查(cha)詢,例(li)如(ru)join,這樣的(de)(de)(de)情況下,關(guan)系(xi)型數(shu)(shu)(shu)據(ju)庫(ku)就會(hui)比NoSQL數(shu)(shu)(shu)據(ju)庫(ku)性能更(geng)(geng)優,而且(qie)精確(que)度更(geng)(geng)高。由于結(jie)(jie)構(gou)(gou)化數(shu)(shu)(shu)據(ju)的(de)(de)(de)規模不算太大(da),數(shu)(shu)(shu)據(ju)規模的(de)(de)(de)增(zeng)長通常也是可預(yu)期(qi)的(de)(de)(de),所以針對結(jie)(jie)構(gou)(gou)化數(shu)(shu)(shu)據(ju)使(shi)用關(guan)系(xi)型數(shu)(shu)(shu)據(ju)庫(ku)更(geng)(geng)好(hao)。關(guan)系(xi)型數(shu)(shu)(shu)據(ju)庫(ku)十分注(zhu)意(yi)數(shu)(shu)(shu)據(ju)操(cao)作的(de)(de)(de)事務性、一致性,如(ru)果對這方面的(de)(de)(de)要求(qiu)關(guan)系(xi)型數(shu)(shu)(shu)據(ju)庫(ku)無(wu)疑可以很好(hao)的(de)(de)(de)滿足。
2、非關系型數據庫(NoSQL)
隨(sui)著近些年技術方向的(de)不斷拓展,大量的(de)NoSql數據(ju)庫(ku)如MongoDB、Redis、Memcache出于(yu)簡(jian)化數據(ju)庫(ku)結構、避免冗余(yu)、影響性能的(de)表(biao)連接、摒棄復(fu)雜分布式的(de)目的(de)被設計。
NoSQL數(shu)(shu)(shu)(shu)據庫(ku)指的(de)(de)是分(fen)(fen)布(bu)式的(de)(de)、非(fei)(fei)關系型的(de)(de)、不(bu)保(bao)證遵循(xun)ACID原則的(de)(de)數(shu)(shu)(shu)(shu)據存儲(chu)系統。NoSQL數(shu)(shu)(shu)(shu)據庫(ku)技術(shu)與(yu)CAP理論、一(yi)致性(xing)哈希算(suan)(suan)(suan)法(fa)有密切關系。所謂CAP理論,簡(jian)單來說就是一(yi)個分(fen)(fen)布(bu)式系統不(bu)可能滿足可用(yong)性(xing)、一(yi)致性(xing)與(yu)分(fen)(fen)區(qu)容錯性(xing)這(zhe)三個要求,一(yi)次性(xing)滿足兩種要求是該系統的(de)(de)上限(xian)。而一(yi)致性(xing)哈希算(suan)(suan)(suan)法(fa)則指的(de)(de)是NoSQL數(shu)(shu)(shu)(shu)據庫(ku)在應用(yong)過程中,為滿足工作需(xu)求而在通(tong)常(chang)(chang)情(qing)況下產(chan)(chan)生的(de)(de)一(yi)種數(shu)(shu)(shu)(shu)據算(suan)(suan)(suan)法(fa),該算(suan)(suan)(suan)法(fa)能有效解決工作方面的(de)(de)諸多(duo)問(wen)(wen)題(ti)但(dan)也存在弊端,即工作完成質量會(hui)(hui)隨著節點(dian)的(de)(de)變(bian)化而產(chan)(chan)生波動,當節點(dian)過多(duo)時,相關工作結果就無法(fa)那么準確。這(zhe)一(yi)問(wen)(wen)題(ti)使整(zheng)個系統的(de)(de)工作效率(lv)(lv)受(shou)到影響,導致整(zheng)個數(shu)(shu)(shu)(shu)據庫(ku)系統的(de)(de)數(shu)(shu)(shu)(shu)據亂碼與(yu)出(chu)錯率(lv)(lv)大(da)大(da)提高,甚至會(hui)(hui)出(chu)現數(shu)(shu)(shu)(shu)據節點(dian)的(de)(de)內(nei)容遷(qian)移,產(chan)(chan)生錯誤的(de)(de)代碼信息。但(dan)盡管如此,NoSQL數(shu)(shu)(shu)(shu)據庫(ku)技術(shu)還是具有非(fei)(fei)常(chang)(chang)明(ming)顯的(de)(de)應用(yong)優勢,如數(shu)(shu)(shu)(shu)據庫(ku)結構(gou)相對簡(jian)單,在大(da)數(shu)(shu)(shu)(shu)據量下的(de)(de)讀寫性(xing)能好;能滿足隨時存儲(chu)自(zi)定(ding)義數(shu)(shu)(shu)(shu)據格式需(xu)求,非(fei)(fei)常(chang)(chang)適用(yong)于大(da)數(shu)(shu)(shu)(shu)據處理工作。
NoSQL數(shu)(shu)據(ju)(ju)(ju)(ju)庫(ku)適(shi)(shi)合追求速度和(he)可(ke)擴展(zhan)性、業(ye)務多(duo)變的(de)(de)應用場景。對于非結構(gou)化數(shu)(shu)據(ju)(ju)(ju)(ju)的(de)(de)處(chu)理更(geng)合適(shi)(shi),如(ru)文(wen)章、評論(lun),這(zhe)(zhe)些數(shu)(shu)據(ju)(ju)(ju)(ju)如(ru)全(quan)文(wen)搜索、機器(qi)學(xue)習通常(chang)只用于模糊處(chu)理,并不需要(yao)像結構(gou)化數(shu)(shu)據(ju)(ju)(ju)(ju)一樣,進(jin)行(xing)精確查詢,而且(qie)這(zhe)(zhe)類(lei)數(shu)(shu)據(ju)(ju)(ju)(ju)的(de)(de)數(shu)(shu)據(ju)(ju)(ju)(ju)規(gui)模往(wang)往(wang)是(shi)海量(liang)的(de)(de),數(shu)(shu)據(ju)(ju)(ju)(ju)規(gui)模的(de)(de)增長(chang)往(wang)往(wang)也是(shi)不可(ke)能預期的(de)(de),而NoSQL數(shu)(shu)據(ju)(ju)(ju)(ju)庫(ku)的(de)(de)擴展(zhan)能力幾乎也是(shi)無限(xian)的(de)(de),所以(yi)NoSQL數(shu)(shu)據(ju)(ju)(ju)(ju)庫(ku)可(ke)以(yi)很好的(de)(de)滿足這(zhe)(zhe)一類(lei)數(shu)(shu)據(ju)(ju)(ju)(ju)的(de)(de)存儲。NoSQL數(shu)(shu)據(ju)(ju)(ju)(ju)庫(ku)利(li)用key-value可(ke)以(yi)大量(liang)的(de)(de)獲(huo)取大量(liang)的(de)(de)非結構(gou)化數(shu)(shu)據(ju)(ju)(ju)(ju),并且(qie)數(shu)(shu)據(ju)(ju)(ju)(ju)的(de)(de)獲(huo)取效(xiao)率(lv)很高(gao),但用它查詢結構(gou)化數(shu)(shu)據(ju)(ju)(ju)(ju)效(xiao)果就(jiu)比(bi)較差(cha)。
目(mu)前NoSQL數據庫(ku)仍然沒(mei)有一個統(tong)一的(de)標(biao)準(zhun),它現在有四(si)種大的(de)分類:
(1)鍵值對存(cun)儲(key-value):代(dai)表軟件(jian)Redis,它的優(you)點(dian)能夠進行數(shu)據的快速查詢(xun),而缺點(dian)是需(xu)要存(cun)儲數(shu)據之間(jian)的關(guan)系。
(2)列存儲:代表軟件Hbase,它的優點是對數據能快速查詢,數據存儲的擴展性強。而缺點是數據庫的功能有局限性。
(3)文檔數據庫存儲:代表軟件(jian)MongoDB,它的優(you)點是(shi)對(dui)數據結構要求(qiu)不特別的嚴格。而缺點是(shi)查(cha)(cha)詢(xun)性(xing)的性(xing)能不好(hao),同時(shi)缺少一種統一查(cha)(cha)詢(xun)語言(yan)。
(4)圖形數(shu)據庫存儲(chu):代表軟(ruan)件InfoGrid,它的優點可(ke)以方便的利用圖結構(gou)相關算法進行(xing)計算。而缺點是要想得到結果必須進行(xing)整個圖的計算,而且遇到不適合的數(shu)據模型時,圖形數(shu)據庫很難使用。