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