《NoSQL數(shù)據(jù)庫(kù)類型》要點(diǎn):
本文介紹了NoSQL數(shù)據(jù)庫(kù)類型,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
本文摘自 Introducing Data Science,我們將向您介紹四大NoSQL數(shù)據(jù)庫(kù)類型.
有四大NoSQL類型:鍵值存儲(chǔ)(key-value store),文件存儲(chǔ)(document store),列導(dǎo)向的數(shù)據(jù)庫(kù)(Column-Oriented Database)和圖形數(shù)據(jù)庫(kù)(graph database).每種類型都辦理了傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)無(wú)法辦理的問(wèn)題.實(shí)際的實(shí)現(xiàn)往往是這些組合的組合.例如,結(jié)合NoSQL類型,Orientdb是一個(gè)多模式的數(shù)據(jù)庫(kù).Orientdb是圖形數(shù)據(jù)庫(kù),每個(gè)節(jié)點(diǎn)都是一個(gè)文檔.
在進(jìn)入不同的NoSQL數(shù)據(jù)庫(kù)之前,讓我們看看與關(guān)系數(shù)據(jù)庫(kù)之間的比較.傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)正在努力的走向規(guī)范化:確保每一個(gè)數(shù)據(jù)都只存儲(chǔ)一次.正規(guī)化標(biāo)志著他們的結(jié)構(gòu)設(shè)置.舉個(gè)例子來(lái)說(shuō),如果你想把一個(gè)人和他的喜好存儲(chǔ)為數(shù)據(jù),那么你就可以建兩個(gè)表:一個(gè)表存儲(chǔ)為人,一個(gè)表存儲(chǔ)他們的喜好.如圖1所示,一個(gè)附加的表是必要的,因?yàn)樗麄兇嬖谥芏嚓P(guān)系:一個(gè)人可以有多個(gè)喜好,然而一個(gè)喜好也可以有很多人喜歡.
圖1
一個(gè)全面的關(guān)系數(shù)據(jù)庫(kù)可以由許多實(shí)體和聯(lián)系表.現(xiàn)在讓我們看看NoSQL不同的類型的數(shù)據(jù)庫(kù)之間的比擬.
行數(shù)據(jù)庫(kù)實(shí)際上就是傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù),每一行有一行id,并在一個(gè)表中存儲(chǔ)的行中的每個(gè)字段.假設(shè),關(guān)于喜好,沒(méi)有額外的表來(lái)存儲(chǔ)并且你只有一個(gè)表來(lái)描述人,如圖2所示.注意,在這種情況下,你有輕微的反規(guī)范化,因?yàn)橄埠檬强梢灾貜?fù)的.如果喜好這個(gè)信息是一個(gè)額外的信息,但在你使用時(shí)并不是必不可少的,添加它作為一個(gè)列表內(nèi)的喜好列是可以接受的方法.但是如果這些信息對(duì)一個(gè)單獨(dú)的表來(lái)說(shuō)是不夠的,它應(yīng)該被存儲(chǔ)在所有的?
圖2
每次你在行存據(jù)庫(kù)中尋找某個(gè)數(shù)據(jù),進(jìn)行每行掃描,不管你必要哪列.假設(shè)你只必要生日在9月的列表.數(shù)據(jù)庫(kù)將在表中從上到下和從左到右掃描所有數(shù)據(jù),如圖3所示,最終返回生日列表.
圖3
索引數(shù)據(jù)在某些列可以顯著提高查詢速度,但索引每一列帶來(lái)額外的開(kāi)銷和數(shù)據(jù)庫(kù)仍然是掃描所有列.
Column databases store分別存儲(chǔ)每一列,允許更快的掃描時(shí),只涉及一小部分列.見(jiàn)圖4.
圖4
這個(gè)布局看起來(lái)很像一個(gè)以行為導(dǎo)向的數(shù)據(jù)庫(kù),每一列都有一個(gè)索引.一個(gè)數(shù)據(jù)庫(kù)索引是一種數(shù)據(jù)結(jié)構(gòu),允許在存儲(chǔ)空間上快速查找數(shù)據(jù)和額外的寫(xiě)(索引更新).索引映射到數(shù)據(jù)的行數(shù),而一個(gè)列數(shù)據(jù)庫(kù)將數(shù)據(jù)映射到行數(shù),這樣計(jì)算變得更快,所以很容易看到有多少人喜歡射箭.例如,單獨(dú)存儲(chǔ)的列也可以優(yōu)化壓縮,因?yàn)橹挥幸粋€(gè)數(shù)據(jù)類型的表.
那么,何時(shí)該使用Row-Oriented Database和Column-Oriented Database呢?在Column-Oriented Database中,很容易添加另一個(gè)列,因?yàn)椴皇芩挠绊?但添加整個(gè)完整記錄必要調(diào)整所有的表.這使得Row-Oriented Database更好于Column-Oriented Database在聯(lián)機(jī)事務(wù)處理(OLTP)方面,因?yàn)樗梢圆粩嗟靥砑踊蚋挠涗?
Column-Oriented Database在執(zhí)行分析和申報(bào)時(shí)的表現(xiàn): 求和值和計(jì)算條目.Row-Oriented Database通常是實(shí)際交易的操作數(shù)據(jù)庫(kù)(如銷售).夜間批處理作業(yè)將用于數(shù)據(jù)庫(kù)更新,支持客戶快速查找和聚合使用MapReduce算法申報(bào).例如column-family stores are Apache HBase、Facebook的Cassandra、Hypertable和the grandfather of wide-column stores、谷歌的 BigTable.
鍵值存儲(chǔ)是最復(fù)雜的NoSQL數(shù)據(jù)庫(kù).顧名思義,鍵值對(duì)的集合,如圖5所示,這種簡(jiǎn)單性使得他們成為最可伸縮的NoSQL數(shù)據(jù)庫(kù)類型,能夠存儲(chǔ)大量的數(shù)據(jù).
圖5
鍵值存儲(chǔ)的值可以是任何東西:一個(gè)字符串,一個(gè)數(shù)字,而且也是一個(gè)新的鍵值對(duì)封裝在一個(gè)對(duì)象.如圖6顯示了一個(gè)稍微復(fù)雜鍵值結(jié)構(gòu).關(guān)鍵值存儲(chǔ)的例子有Redis、Voldemort、Riak和Amazon’s Dynamo.
{"internal data":[{"entities":[ {"customer":[ {"id:1,"name":"Freddy"}, {"id:2,"name":"Fritz"} }], {"legal entities":[ {"id":1,"company":"Maiton"} ]}]},{"Products":[ {"furniture":[ {"id" :1,"name":"Octopus Table","stock":1} ]}]}]}
圖6
文檔存儲(chǔ)是鍵值存儲(chǔ)的復(fù)雜性的一個(gè)步驟:一個(gè)文檔存儲(chǔ)庫(kù)確實(shí)假定一個(gè)特定的文檔結(jié)構(gòu),可以用一個(gè)模式來(lái)指定.文檔存儲(chǔ)出現(xiàn)最自然的NoSQL數(shù)據(jù)庫(kù)類型中,因?yàn)樗鼈冇糜诖鎯?chǔ)日常文檔,并且他們?cè)试S復(fù)雜的查詢和計(jì)算,這往往已經(jīng)成為聚合形式的數(shù)據(jù).在關(guān)系數(shù)據(jù)庫(kù)中存儲(chǔ)的方式是從一個(gè)正常化的角度來(lái)看,所有的一切都應(yīng)該存儲(chǔ)一次,并通過(guò)外鍵連接.文件存儲(chǔ)的關(guān)心小的正常化,只要數(shù)據(jù)是在一個(gè)結(jié)構(gòu)是有意義的.關(guān)系數(shù)據(jù)模型并不總是適合某些業(yè)務(wù)案例.
報(bào)紙或雜志,例如,包含文章.要把這些存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)中,首先要把它們切碎:這篇文章正文在一個(gè)表中,作者和作者所有的信息,以及在一個(gè)網(wǎng)站上頒發(fā)的文章的評(píng)論.如圖7所示,報(bào)紙上一篇文章也可以存儲(chǔ)為一個(gè)單一的實(shí)體,這降低了對(duì)于習(xí)慣看到文章內(nèi)容所消耗的時(shí)間.文檔存儲(chǔ)以MongoDB和CouchDB為例子.
圖7
最后一個(gè)大的NoSQL數(shù)據(jù)庫(kù)類型是最復(fù)雜的一個(gè),為了高效地存儲(chǔ)實(shí)體之間的關(guān)系.數(shù)據(jù)是高度互聯(lián)的,如社會(huì)網(wǎng)絡(luò),科學(xué)論文引用,或資本資產(chǎn)集群,圖形數(shù)據(jù)庫(kù)的答案.圖或網(wǎng)絡(luò)數(shù)據(jù)主要有2個(gè)組成部分:
節(jié)點(diǎn):實(shí)體自己.在社交網(wǎng)絡(luò)中,這可能是人.
邊:實(shí)體間的關(guān)系.這種關(guān)系用一條線來(lái)表示,并且有它本身的特性.邊可以有一個(gè)方向,例如,如果箭頭表示誰(shuí)是誰(shuí)的老板.
圖可以變的非常復(fù)雜來(lái)給定足夠的關(guān)系和實(shí)體類型.圖8已經(jīng)表明了復(fù)雜性,只有有限數(shù)量的實(shí)體.圖數(shù)據(jù)庫(kù)像Neo4j還聲稱保持ACID,而文檔存儲(chǔ)和鍵值存儲(chǔ)保持BASE.
圖8
這個(gè)可能性是無(wú)限的,因?yàn)槭澜缯兊迷絹?lái)越互聯(lián),Graph databases可能會(huì)贏過(guò)其他類型的數(shù)據(jù)庫(kù),包含如今仍然占主導(dǎo)地位的關(guān)系數(shù)據(jù)庫(kù).排名最受歡迎的數(shù)據(jù)庫(kù)和他們是如何進(jìn)展可以點(diǎn)擊:最新數(shù)據(jù)庫(kù)排名
翻譯:CSDN編纂孫思,關(guān)注數(shù)據(jù)庫(kù),歡迎加入CSDN 數(shù)據(jù)庫(kù)討論QQ群:123038767.尋求報(bào)道或投稿,請(qǐng)聯(lián)系sunsi@csdn.net.
2016年3月18日-19日,由CSDN重磅打造的數(shù)據(jù)庫(kù)核心技術(shù)與實(shí)戰(zhàn)應(yīng)用峰會(huì)、互聯(lián)網(wǎng)應(yīng)用架構(gòu)實(shí)戰(zhàn)峰會(huì)將在上海舉行.這兩場(chǎng)峰會(huì)將邀請(qǐng)業(yè)內(nèi)頂尖的架構(gòu)師和技術(shù)專家,共同探討高可用/高并發(fā)系統(tǒng)架構(gòu)設(shè)計(jì)、新技術(shù)應(yīng)用、移動(dòng)應(yīng)用架構(gòu)、微服務(wù)、智能硬件架構(gòu)、云數(shù)據(jù)庫(kù)實(shí)戰(zhàn)、新一代數(shù)據(jù)庫(kù)平臺(tái)、產(chǎn)品選型、性能調(diào)優(yōu)、大數(shù)據(jù)應(yīng)用實(shí)戰(zhàn)等領(lǐng)域的熱點(diǎn)話題與技術(shù).(報(bào)名參會(huì))
維易PHP培訓(xùn)學(xué)院每天發(fā)布《NoSQL數(shù)據(jù)庫(kù)類型》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/9332.html