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