天天看點

談談NoSQL——非關系型資料庫概覽NoSql

NoSql

前言

随着大資料時代的崛起,應用程式需要處理的資料的複雜性大大增加,資料的複雜性不僅包括它的大小,還包括它的互相關聯性,結構的千變萬化以及對資料的同時通路。

假設,我們要查詢一組資料,但是join了4、5次,進行一次搜尋深度為4的查詢,這将會為關系型資料引擎帶來巨大的壓力,當資料量過大時,每增加一個深度,無意再先前的基數上再做笛卡爾積,如果有1000條資料,我要通過關系型資料庫進行深度為5的查詢,那将會産生1000的5次方個記錄,然而這僅僅是1000條資料,真正的大資料環境下,至少都是上百萬條的資料,顯然,關系型資料庫在這種複雜的對象映射關系中并不适合,是以NoSql的概念也已應運而生。

盡管NoSQL的名字已經被人們所接受,但這個并沒有準确反映出其代表的意義,反而給人們以錯誤的映像,認為它隻是對SQL而言的一個概念。相對而言,叫做”非關系型資料庫”會更合适一些,因為 關系型/非關系範式才是我們關注的point,而SQL隻是關系型技術使用的一種語言。

非關系型資料庫主要有四類:

  • 主鍵值存儲
  • 列族存儲
  • 面向文檔的資料庫
  • 圖形資料庫

主鍵值存儲

主鍵值存儲代表了最簡單,但卻非常強大的處理大量并發通路資料的方法。緩存是一種典型的主鍵值技術。主鍵值存儲允許使用非常簡單的結構存儲資料,這些資料常常在記憶體中,甚至在高并發環境下的高速通路。

這些資料存儲在一個巨大的哈希表中,由主鍵進行通路。資料取主鍵值對的形式,對其操作大都局限于使用簡單的put(write)和get(read)操作。其值僅支援簡單的資料結構如文本或二進制内容,雖然一些較新的主鍵值存儲支援一組有限的複雜資料類型(如:Redis支援清單和映射作為值)。

主鍵值存儲是最簡單的NOSQL技術。所有其他的NOSQL類别都建立在簡單性、高性能和可擴充性的主鍵值存儲技術上,以更好的适合一些特定的使用場所。

小結

主鍵值存儲:

典型應用案例

  • 緩存
  • 快速讀取通路簡單域
  • 大規模并發系統

    最著名的技術

  • Redis
  • Memcached
  • Tokyo Cabinet

列族存儲

分布式主鍵值模型縮放的很好,但是在這模型中,必須使用某些類型的資料結構。這就是列族存儲類如何進入到NOSQL領域中的。

列族存儲是将類似的值(或列)作為一組一起存儲在同一列族中(例如,使用者資料或有關書籍的資訊)。使用這種方法,從一個單一的主鍵值存儲發展到一組相關值的存儲。(可以把列族中存儲的資料看作為一張映射圖,或者将主鍵值存儲到每一個值都是另外一張映射圖的地方)。列族都存在一個單一的檔案中,以實作更好的讀取和寫入相關資料的性能。這種方法的主要目的是實作在大資料時的高性能和高可用性。這個領域的領先技術是Goole的BigTable和Cassandra,最初都是由Facebook開發的。

小結

列族存儲:

典型應用案例

  • 大規模寫入
  • 并發資料通路(讀和寫)

    最著名的技術

  • Cassandra
  • Goole BigTable
  • Apache HBase

面向文檔的資料庫

很多實際的問題需求看上去像是一個檔案的資料結構。面向文檔的資料庫正好提供的這樣的需求,用以存儲簡單的,但确實高效的,無架構的文檔資料。文檔模型中使用的資料結構,可以使你添加自包含的檔案和關聯關系到該文檔的資料中。

你可以将面向文檔資料庫,看作主鍵值存儲,這裡的值就是一個檔案。這使得面向文檔資料庫更容易為通用軟體問題建立資料模型,但這使得它的性能和可擴充性相比主鍵值和列族存儲稍微有些降低。内置于存儲系統的對象模型的周遊通常是一個對所有情況很好的權衡,但不包括大量的并發使用情況。

小結

面向文檔資料庫:

典型應用案例

  • 當域模型是一個自然檔案
  • 使用自然檔案資料結構簡化開發
  • 高可擴充系統(盡管在主鍵值存儲和列族存儲的低層次上)

    最著名的技術

  • MongoDB
  • CouchDB

圖形資料庫

圖形資料庫的設計是從以下出發的,即開發人員常常在他們的應用程式中建立圖形狀的資料結構,單仍然将資料以一個非自然的方式存儲,或者是在表格和關系資料庫的列中,或者是在其他的NOSQL系統。如:ACL清單,社交網絡或者任何類型的網絡問題都是自然的圖形問題。圖形資料模型是圖形資料庫的核心,最終能夠将代表圖形的資料作為一個直接圖形存儲一個對象模型。

這個資料模型可以自然地表達許多非常複雜的軟體需求,圖形周遊查詢的效率和性能是圖形資料庫的主要優勢。

小結

圖形資料庫:

典型應用案例

  • 擁有互聯的資料
  • 能夠自然的用節點和關系表達的域
  • 社交網絡
  • 推薦引擎
  • 通路控制清單

    最著名的技術

  • Neo4j
  • AllegroGraph
  • OrientDB