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
















 
 
 








 
 
 
 