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