論NoSQL的數(shù)據(jù)模型
本文內(nèi)容是對(duì)《NoSQL Data Modeling Techniques》一文的簡(jiǎn)單概述,原文對(duì)NoSQL的幾種數(shù)據(jù)模型進(jìn)行了詳細(xì)深入的討論。是了解NoSQL數(shù)據(jù)模型不過(guò)錯(cuò)過(guò)的全面資料。
NoSQL的一些非功能性的特性,比如擴(kuò)展性、性能以及一致性的討論,目前已經(jīng)有很多。而對(duì)于NoSQL產(chǎn)品內(nèi)部數(shù)據(jù)模型相關(guān)的知識(shí)一直比較欠缺,本文就希望能夠系統(tǒng)地對(duì)NoSQL數(shù)據(jù)模型進(jìn)行一些探討。
我們大致先將NoSQL數(shù)據(jù)模型劃分為下面幾類(lèi):Key-Value存儲(chǔ)、類(lèi)BigTable數(shù)據(jù)庫(kù)、文檔數(shù)據(jù)庫(kù),全文索引引擎以及圖數(shù)據(jù)庫(kù)。
下面先上一個(gè)簡(jiǎn)單有趣的示例圖,簡(jiǎn)單描述各個(gè)不同數(shù)據(jù)模型的構(gòu)造:
對(duì)照上面的圖片,我們對(duì)幾種數(shù)據(jù)模型進(jìn)行簡(jiǎn)單的描述:
- Key-Value模型是最簡(jiǎn)單,也是最方便使用的數(shù)據(jù)模型,它支持簡(jiǎn)單的key對(duì)value的鍵值存儲(chǔ)和提取
- Key-Value模型的一個(gè)大問(wèn)題是它通常是由HashTable實(shí)現(xiàn)的,所以無(wú)法進(jìn)行范圍查詢(xún),所以有序Key-Value模型就出現(xiàn)了,有序Key-Value可以支持范圍查詢(xún)
- 雖然有序Key-Value模型能夠解決范圍查詢(xún)和問(wèn)題,但是其Value值依然是無(wú)結(jié)構(gòu)的二進(jìn)制碼或純字符串,通常我們只能在應(yīng)用層去解析相應(yīng)的結(jié)構(gòu)。而類(lèi)BigTable的數(shù)據(jù)模型,能夠支持結(jié)構(gòu)化的數(shù)據(jù),包括列,列簇,時(shí)間戳以及版本控制等元數(shù)據(jù)的存儲(chǔ)。
- 而文檔型存儲(chǔ)相對(duì)到類(lèi)BigTable存儲(chǔ)又有兩個(gè)大的提升。一是其Value值支持復(fù)雜的結(jié)構(gòu)定義,二是支持?jǐn)?shù)據(jù)庫(kù)索引的定義。
- 全文索引模型與文檔型存儲(chǔ)的主要區(qū)別在于文檔型存儲(chǔ)的索引主要是按照字段名來(lái)組織的,而全文索引模型是按字段的具體值來(lái)組織的。
- 圖數(shù)據(jù)庫(kù)模型也可以看作是從Key-Value模型發(fā)展出來(lái)的一個(gè)分支,不同的是它的數(shù)據(jù)之間有著廣泛的關(guān)聯(lián),并且這種模型支持一些圖結(jié)構(gòu)的算法。
對(duì)于NoSQL與關(guān)系型的差別,簡(jiǎn)單總結(jié)如下:
- NoSQL數(shù)據(jù)庫(kù)的數(shù)據(jù)模型通常與實(shí)際需求更貼近。通常使用關(guān)系型數(shù)據(jù)庫(kù)時(shí),需要關(guān)心的問(wèn)題是“數(shù)據(jù)庫(kù)能提供哪些功能”,而NoSQL模型關(guān)心得更多的是“可以解決哪些問(wèn)題”
- 使用NoSQL數(shù)據(jù)模型,通常需要你對(duì)存儲(chǔ)的內(nèi)部結(jié)構(gòu)和實(shí)現(xiàn)算法有一定的了解。
- 使用NoSQL數(shù)據(jù)庫(kù),通常要自己處理數(shù)據(jù)結(jié)構(gòu)解析和數(shù)據(jù)的冗余復(fù)制問(wèn)題。
- 對(duì)于關(guān)系型數(shù)據(jù)庫(kù)來(lái)說(shuō),對(duì)數(shù)據(jù)分級(jí)存儲(chǔ)的處理并不強(qiáng)。但是對(duì)圖數(shù)據(jù)庫(kù),或者說(shuō)其它的NoSQL數(shù)據(jù)庫(kù)來(lái)說(shuō),對(duì)數(shù)據(jù)的分級(jí)處理都是預(yù)先考慮的。
目前簡(jiǎn)單將NoSQL幾個(gè)分類(lèi)的代表產(chǎn)品列舉如下:
- Key-Value 存儲(chǔ): Oracle Coherence, Redis, Kyoto Cabinet
- 類(lèi)BigTable存儲(chǔ): Apache HBase, Apache Cassandra
- 文檔數(shù)據(jù)庫(kù): MongoDB, CouchDB
- 全文索引: Apache Lucene, Apache Solr
- 圖數(shù)據(jù)庫(kù): neo4j, FlockDB
更多內(nèi)容請(qǐng)移步原文:highlyscalable.wordpress.com
原文鏈接:http://blog.nosqlfan.com/html/3689.html
【編輯推薦】
- 如何定義NoSQL
- MoreSQL(NewSQL)挑戰(zhàn) NoSQL?
- 甲骨文NoSQL數(shù)據(jù)庫(kù)第一印象
- 先睹為快:甲骨文NoSQL數(shù)據(jù)庫(kù)
- 分布式緩存能否作為NoSQL數(shù)據(jù)庫(kù)?