Nosql 資料管理系統與模型的比較

oschina發表於2014-03-23

  簡介

  NoSQL資料嘗試著提供那些關聯式資料庫所不能提供的功能,無論是為了儲存簡單的鍵值對(key-value),更短的時間長度,快取記憶體,還是保持資料的非結構化集合(比如collections),這些都是在關係型資料庫和SQL(Structured Query Language)中很難實現的。

  在這篇DigitalOcean的文章中,我們將介紹各種流行的NoSQL資料庫系統,介紹他們的作用以及功能,因而幫助你,根據你的易用系統的需求來決定選擇哪一個NoSQL資料庫。

 術語表

  1. 資料庫管理系統

  2. NoSQL 資料庫管理系統

  1. 基於鍵/值

  2. 基於列

  3. 基於文件

  4. 基於圖形

  3. 基於鍵/值的 NoSQL 資料庫管理系統

  1. 流行的基於鍵/值的資料庫

  2. 何時使用

  4. 基於列 NoSQL 資料庫管理系統

  1. 流行的基於列的資料庫

  2. 何時使用

  5. 基於檔案的 NoSQL 資料庫管理系統

  1. 流行的基於檔案的資料庫

  2. 何時使用

  6. 基於圖形的 NoSQL 資料庫管理系統

  1. 流行的基於圖形的資料庫

  2. 何時使用

  7. NoSQL資料庫管理系統與關係型資料庫管理系統的比較

  1. 何時使用 NoSQL Databases

 資料庫管理系統

  資料庫是為各種不同的資訊(資料)提供邏輯上模型化的儲存空間。除了無模式以外的每個資料庫,都有一個模型為所處理的資料提供結構。資料庫管理系統是管理各種形狀,大小和型別的資料庫的應用程式(或庫)。

  注: 要學習更多資料庫管理系統知識, 請查閱我們的文章: 瞭解資料庫(http://link_to_10_1_understanding_databases).

 NoSQL 資料庫管理系統

  在過去的十年左右中,關聯式資料庫管理系統因為各種各樣的理由已被開發人員和系統管理員選擇用於各種各樣的應用程式中。儘管並不完全靈活,許多關聯式資料庫管理系統的強大的性質允許複雜的資料庫體制被建立,查詢和使用。這甚至超過許多需求的要求,直到不久以前,不同的需求開始上升才發生逆轉。

  術語“NoSQL”一詞是在十年前被創造的,有趣的是,它是作為另一個關聯式資料庫的名稱。然而,該資料庫在背後有一個不同的想法:消除標準化的SQL的使用。在接下來的幾年,別人拾起並通過借鑑其他各種非關係型資料庫繼續發展了這一思想成為 NoSQL 資料庫

  從設計上,NoSQL 資料庫和管理系統都是非關係型(也稱非正規化型)的。它們並非基於同一種模型(如關係型資料庫的關係模型),而是每種資料庫依據其不同的功能目標,選擇了不同的模型。

  NoSQL 資料庫不同的操作模型和功能系統幾乎有一大把:

  • 鍵 / 值:

  如 Redis,MemcacheDB等。

  • 列:

  如 Cassandra,HBase等。

  • 文件:

  如 MongoDB,Couchbase等。

  • 圖形:

  如 OrientDB,Neo4J等。

  為了更好地理解每種資料庫管理系統的不同角色和底層技術,我們快速地過一遍這4種操作模型吧。

  基於鍵值

  我們將要開始我們的NoSQL模型之旅,它是基於鍵值的資料庫管理系統,因為可以把它視為是實現NoSQL的基礎和骨架。

  該型別的資料庫通過關鍵字與值的對映來工作,有點類似字典。沒有結構也沒有關係。連線到資料庫伺服器(例如Redis)以後,應用程式陳述一個關鍵字如the_answer_to_life並提供也這對應的值如42,這個值隨後可以通過提供的關鍵字以相同的方式搜尋。

  鍵值資料庫通常用於快速的儲存基本資訊,有時是一些處理過的非基本的,例如CPU和記憶體密集的計算。它們的表現非常好,效能高,且通常易於擴充套件。

  注意:在計算機領域,字典通常指特定型別的資料物件。它們由鍵值對陣列構成。

  基於列

  基於列的NoSQL資料庫管理系統通過提升基於鍵值的簡單本質來工作。

  雖然在網際網路中它們難於理解,但是這些資料庫的工作機制相當的簡單,通過建立一個或者多個鍵值對的集合來與記錄相匹配。

  不像傳統的關聯式資料庫定義了模式,基於列的NoSQL解決方案不需要預定義表結構就可以處理資料。每條記錄有一列或者多列,這些列包含了資訊,每個記錄的每列都可能是不相同的。

  基本上,基於列的NoSQL資料庫就是個二維陣列,每個鍵(即 行/記錄)都連線有一個或多個 鍵/值對,這些管理系統允許非常巨大和非結構化的資料被儲存和使用(例如有非常多資訊的記錄)。

  這些資料庫通常用在當必須儲存大量資訊記錄,簡單的 鍵/值對 不足以應對時。基於列實現的資料庫管理系統,模式自由的模型,擴容性非常好。

  基於文件

  基於文件的 NoSQL 資料庫系統,就像一波瞬間席捲了許多人的最新潮流。這類資料庫系統工作原理與基於列的資料庫類似;然而,它們支援更深層的巢狀,能得到複雜的結構(例如,文件包含在一個文件裡,而這個文件又包含在另一個文件裡)。

  文件克服了基於列的資料庫中鍵/值巢狀只能有一級或兩級的限制。基本上,無論多麼複雜、無論什麼形態的結構都能形成一個文件,而文件就可以用這類資料庫系統來儲存。

  儘管它們有這樣強大的特性,並且支援以獨立的鍵來查詢記錄,基於文件的資料庫系統相比其他系統仍然有自己的問題和不足之處。例如,檢索記錄中的一個值就需要牽扯出整個記錄,update 也是如此,而這都會嚴重地影響效能。

  基於圖形

  最後來看看 NoSQL 資料庫系統中的奇葩——基於圖形的系統。

  基於圖形的資料庫系統模型表示資料的方式與上文提到的三種模型截然不同。他們使用樹形的結構(也就是所說的“圖形”),包括結點和通過關係(relation)相互連線的邊。

  與數學類似,某些特定操作在這類模型上會格外簡單。這要感謝樹形結構能連結資訊、將相關資訊(例如相關聯的人)分組的本質。

  這類資料庫通常應用於關係(connection)需要建立明確邊界的場景。例如,當你註冊隨便一個社交網路時,你朋友與你的關係,和他們朋友的朋友與你的關係,使用基於圖形的資料庫系統來處理會簡單很多。

 基於鍵 / 值的 NoSQL 資料庫系統

  鍵/值型的資料儲存往往表現很好,容易使用,並且通常有很好的擴充套件性。

  流行的基於鍵 / 值的資料庫

  一些流行的基於鍵/值的資料儲存如下:

  • Redis:

  記憶體中的鍵/值儲存,附有可選的持久化功能。

  • Riak:

  高度分散式的,自我複製(replicated)的鍵/值儲存。

  • Memcached / MemcacheDB:

  基於記憶體的分散式鍵/值儲存。

  何時使用?

  基於鍵/值的資料儲存一些常見的使用場景有:

  • 快取:

  快速快取資料,以供將來——可能是頻繁地——使用。

  • 用作佇列:

  部分鍵/值儲存(例如 Redis)支援list,set,queue等型別。

  • 分散式資訊 / 任務處理:

  可以用來實現觀察者/釋出訂閱(Pub/Sub)模式。

  • 儲存活躍狀態資訊:

  需要維護一個狀態的應用很適合使用鍵/值儲存。

 基於列的 NoSQL 資料庫系統

  基於列的資料儲存非常強大,它們能夠可靠地儲存非常大規模的重要資料。儘管在資料的組成方面並不“靈活”,這類資料庫仍然功能強大,效能良好。

  流行的基於列的資料庫

  一些流行的基於列的資料儲存有:

  • Cassandra:

  建立在 BigTable 和 DynamoDB 基礎上的基於列的資料儲存。

  • HBase:

  為 Apache Hadoop 設計的資料儲存,創意來自 BigTable。

  何時使用?

  基於列的資料儲存的一些流行用例:

  • 儲存非結構化和非易失性的資訊:

  如果需要長時間儲存一個巨大的屬性和值的集合,基於列的資料儲存是非常方便的。

  • 擴容:

  基於列的資料儲存天生是高度可擴容的。他們可以處理那些有可怕數量的資訊。

 基於檔案的 NoSQL 資料庫管理系統

  基於檔案的資料儲存非常適於儲存許多不相關的複雜資訊,不同結構之間可以有高度的可變性。

  流行的基於檔案的資料庫

  流行的一些基於檔案的資料儲存:

  • Couchbase:

  基於JSON, 相容“記憶體緩衝”的基於檔案的資料儲存。

  • CouchDB:

  一個衝破性的基於檔案的資料儲存。

  • MongoDB:

  一個非常流行和功能很好的資料庫。

  使時使用:

  使用基於檔案的資料儲存的一些普遍情況:

  • 巢狀的資訊:

  基於檔案的資料儲存允許很深的巢狀,和複雜的資料結構。

  • JavaScript友好性:

  基於檔案的資料儲存的最具決定性的功能之一是他們與應用程式互動的方式:利用對JS友好的JSON。

 基於圖形的NoSQL資料庫管理系統

  基於圖形的資料儲存提供了一個非常獨特的功能,是任何其他資料庫管理系統無法相比的。

  流行的基於圖形的資料庫

  一些流行的基於圖形的資料庫如下:

  • OrientDB:

  一個非常快速的基於圖形和文件的混合 NoSQL 資料儲存,使用 Java 編寫,包含幾種不同的操作模式。

  • Neo4J:

  一個非正規化的,基於圖形的 Java 編寫的資料儲存,非常熱門而強大。

  何時使用?

  基於圖形的資料庫一些常見的使用情景如下:

  • 處理複雜的關聯資訊:

  如同在簡介中說過的一樣,圖形資料庫在處理複雜但相關聯的資訊方面極其高效而易用。例如兩個實體和與它們不同層次間接連線的實體之間的關聯。

  • 建模和處理分類:

  圖形資料庫尤擅牽涉到關係的各種情形。以關係的方式來建模資料、為各種資料分類,用這類資料庫可以處理得很好。

 NoSQL資料庫與關聯式資料庫管理系統的比較

  為了對NoSQL解決方案不同於關聯式資料庫管理系統之處有一個清晰畫面,讓我們建立一個快速的比較表:

  何時使用NoSQL資料庫

  • 尺寸問題:

  如果將具有非常大的資料集,來自NoSQL家族的資料庫管理系統更容易實現持續擴容。

  • 速度:

  NoSQL資料庫通常更快,對於寫入來說有時非常快。讀取也可以很快,這取決於NoSQL資料庫的型別和查詢的資料。

  • Schema-free 的設計:

  關聯式資料庫管理系統從一開始就需要結構化。NoSQL解決方案提供了大量的靈活性。

  • 自動(或簡單的複製/擴容):

  NoSQL資料庫正在迅速增長,今天他們正在積極建立-廠商試圖解決共同的問題,其中一個顯然是複製和縮放。不像關聯式資料庫管理系統那樣,NoSQL解決方案可以很容易的在簇上擴容和工作。

  • 多重選擇:

  當來選擇一個NoSQL資料儲存時,正如我們已經討論的,有多種模式,你可以從中選擇獲得最滿意的資料庫管理系統——這取決於你的資料型別。

  原文地址:https://www.digitalocean.com/community/articles/a-comparison-of-nosql-database-management-systems-and-models

相關文章