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