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