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