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