論 NoSQL 的數據模型

openkk 12年前發布 | 28K 次閱讀 NOSQL

本文內容是對《NoSQL Data Modeling Techniques》一文的簡單概述,原文對NoSQL的幾種數據模型進行了詳細深入的討論。是了解NoSQL數據模型不過錯過的全面資料。

NoSQL的一些非功能性的特性,比如擴展性、性能以及一致性的討論,目前已經有很多。而對于NoSQL產品內部數據模型相關的知識一直比較欠缺,本文就希望能夠系統地對NoSQL數據模型進行一些探討。

我們大致先將NoSQL數據模型劃分為下面幾類:Key-Value存儲、類BigTable數據庫、文檔數據庫,全文索引引擎以及圖數據庫。

下面先上一個簡單有趣的示例圖,簡單描述各個不同數據模型的構造:

論 NoSQL 的數據模型

對照上面的圖片,我們對幾種數據模型進行簡單的描述:

  • Key-Value模型是最簡單,也是最方便使用的數據模型,它支持簡單的key對value的鍵值存儲和提取
  • Key-Value模型的一個大問題是它通常是由HashTable實現的,所以無法進行范圍查詢,所以有序Key-Value模型就出現了,有序Key-Value可以支持范圍查詢
  • 雖然有序Key-Value模型能夠解決范圍查詢和問題,但是其Value值依然是無結構的二進制碼或純字符串,通常我們只能在應用層去解析相應的結構。而類BigTable的數據模型,能夠支持結構化的數據,包括列,列簇,時間戳以及版本控制等元數據的存儲。
  • 而文檔型存儲相對到類BigTable存儲又有兩個大的提升。一是其Value值支持復雜的結構定義,二是支持數據庫索引的定義。
  • 全文索引模型與文檔型存儲的主要區別在于文檔型存儲的索引主要是按照字段名來組織的,而全文索引模型是按字段的具體值來組織的。
  • 圖數據庫模型也可以看作是從Key-Value模型發展出來的一個分支,不同的是它的數據之間有著廣泛的關聯,并且這種模型支持一些圖結構的算法。

對于NoSQL與關系型的差別,簡單總結如下:

  • NoSQL數據庫的數據模型通常與實際需求更貼近。通常使用關系型數據庫時,需要關心的問題是“數據庫能提供哪些功能”,而NoSQL模型關心得更多的是“可以解決哪些問題”
  • 使用NoSQL數據模型,通常需要你對存儲的內部結構和實現算法有一定的了解。
  • 使用NoSQL數據庫,通常要自己處理數據結構解析和數據的冗余復制問題。
  • 對于關系型數據庫來說,對數據分級存儲的處理并不強。但是對圖數據庫,或者說其它的NoSQL數據庫來說,對數據的分級處理都是預先考慮的。

目前簡單將NoSQL幾個分類的代表產品列舉如下:

  • Key-Value 存儲: Oracle Coherence, Redis, Kyoto Cabinet
  • 類BigTable存儲: Apache HBase, Apache Cassandra
  • 文檔數據庫: MongoDB, CouchDB
  • 全文索引: Apache Lucene, Apache Solr
  • 圖數據庫: neo4j, FlockDB

更多內容請移步原文:highlyscalable.wordpress.com

本文轉載自: http://blog.nosqlfan.com/html/3689.html

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!