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