# 什麼是NoSQL?
NoSQL是一種非關系型DMS,不需要固定的架構,可以避免joins連結,并且易于擴充。NoSQL資料庫用于具有龐大資料存儲需求的分布式資料存儲。NoSQL用于大資料和實時Web應用程式。例如,像Twitter,Facebook,Google這樣的大型公司,每天可能産生TB級的使用者資料。
NoSQL資料庫代表“不僅僅是SQL”或“不是SQL”。雖然NoRELNoSQL會是一個更好的名詞。Carl Strozz在1998年引入了NoSQL概念。
傳統的RDBMS使用SQL文法來存儲和查詢資料。相反,NoSQL資料庫系統包含可存儲結構化,半結構化,非結構化和多态資料的多種資料庫技術。
通過本節教程,我們将學習如下内容-
• 什麼是NoSQL?
• 為什麼使用NoSQL?
• NoSQL資料庫的簡要曆史
• NoSQL的功能
• NoSQL資料庫的類型
• NoSQL的查詢機制工具
• 什麼是CAP定理?
• 最終一緻性
• NoSQL的優勢
# 為什麼使用NoSQL?
NoSQL資料庫的概念在處理大量資料的網際網路巨頭(例如Google,Facebook,Amazon等)中變得很流行。使用RDBMS處理海量資料時,系統響應時間變慢。
為了解決此問題,當然可以通過更新現有硬體來“橫向擴充”我們的系統。但這個成本很高。
這個問題的替代方案是在負載增加時将資料庫負載配置設定到多個主機上。這種方法稱為“橫向擴充”。
NoSQL資料庫是非關系資料庫,是以在設計時考慮到Web應用程式,比關系資料庫更好地擴充。
# NoSQL資料庫的簡要曆史
• 1998年-Carlo Strozzi在他的輕量級開源關系資料庫中使用術語NoSQL
• 2000-圖形資料庫Neo4j啟動
• 2004年-推出Google BigTable
• 2005年-啟動CouchDB
• 2007年-釋出有關Amazon Dynamo的研究論文
• 2008年-Facebook開源Cassandra項目
• 2009年-重新引入NoSQL術語
# NoSQL的功能
非關系
• NoSQL資料庫從不遵循關系模型
• 切勿為tables 提供固定的固定列記錄
• 使用自包含的聚合或BLOB
• 不需要對象關系映射和資料規範化
• 沒有複雜的功能,例如查詢語言,查詢計劃者,
參照完整性聯接,ACID
# 動态架構
• NoSQL資料庫是無模式的或具有寬松模式的資料庫
• 不需要對資料架構進行任何形式的定義
• 提供同一域中的異構資料結構
# 簡單的API
• 提供易于使用的界面,用于存儲和查詢提供的資料
• API允許進行低級資料操作和選擇方法
• 基于文本的協定,通常與帶有JSON的HTTP REST一起使用
• 多數不使用基于标準的查詢語言
• 支援Web的資料庫作為面向網際網路的服務運作
# 分布式
• 可以以分布式方式執行多個NoSQL資料庫
• 提供自動縮放和故障轉移功能
• 通常可犧牲ACID概念來實作可伸縮性和吞吐量
• 分布式節點之間幾乎沒有同步複制,多為異步多主複制,對等,HDFS複制
• 僅提供最終的一緻性
• 無共享架構。這樣可以減少協調并提高分布。
# NoSQL資料庫的類型NoSQL資料庫主要有四類。這些類别中的每一個都有其獨特的屬性和局限性。沒有特定的資料庫可以更好地解決所有問題。您應該根據您的産品需求選擇一個資料庫。
讓我們看看所有這些:
• 基于鍵值對
• Column-oriented Graph
• Graphs based
• 面向文檔
# 基于鍵值對
資料存儲在鍵/值對中。它以這種方式設計,可以處理大量資料和繁重的工作。
鍵值對存儲資料庫将資料存儲為哈希表,其中每個鍵都是唯一的,并且值可以是JSON,BLOB(二進制大對象),字元串等。
例如,鍵值對可能包含與“ Guru99”的值,相關聯到包含“ Website”的鍵。
它是NoSQL資料庫的最基本類型之一。這種NoSQL資料庫用作集合,dictionaries,關聯數組等。鍵值存儲可幫助開發人員存儲較少架構的資料。它們最适合購物車中的物品。
Redis,Dynamo,Riak是鍵值存儲資料庫的一些示例。它們全部基于亞馬遜的Dynamo論文
# 基于列
面向列的資料庫在列上工作,基于Google的BigTable論文。每列都單獨處理。單列資料庫的值連續存儲。
在聚合查詢(例如SUM,COUNT,AVG,MIN等)上提供了高性能,因為資料在列中随時可用。
基于列的NoSQL資料庫被廣泛用于管理資料倉庫,商業智能,CRM,圖書館書籍目錄,
Base,Cassandra,HBase,Hypertable是基于列的資料庫。
# 面向文檔:
面向文檔的NoSQL DB将資料存儲和檢索為鍵值對,但值部分存儲為文檔。該文檔以JSON或XML格式存儲。DB可以了解該值,并且可以查詢該值。
在上圖中的左側,我們潰瘍看到有行和列,而在右側,我們有一個文檔資料庫,該資料庫的結構與JSON類似。現在,對于關系資料庫,必須知道擁有哪些列,依此類推。但是,對于文檔資料庫,具有JSON對象之類的資料存儲。我們不需要定義,以便使其靈活。
文檔類型主要用于CMS系統,部落格平台,實時分析和電子商務應用程式。它不應用于需要多種操作或針對不同聚合結構進行查詢的複雜交易。
Amazon SimpleDB,CouchDB,MongoDB,Riak,Lotus Notes,MongoDB是流行的基于文檔的DBMS系統。
# Graph-Based(基于圖形)
圖類型資料庫存儲實體以及這些實體之間的關系。實體存儲為節點,關系作為邊。一條邊給出了節點之間的關系。每個節點和邊緣都有唯一的辨別符。
與關系資料庫中表的松散連接配接相比,Graph資料庫本質上是多關系的。周遊關系很快,因為它們已被存在于資料庫中,是以無需計算它們。
基于圖形資料庫主要用于社交網絡,物流,空間資料。
Neo4J, Infinite Graph, OrientDB, FlockDB是一些比較流行的基于圖形的資料庫。
NoSQL的查詢機制工具
最常見的資料檢索機制是基于 REST 的值檢索,該值基于其key/ID,擷取資料。
文檔存儲資料庫提供了更困難的查詢,因為他們了解鍵值對中的值。例如,CouchDB允許使用MapReduce定義視圖
# 什麼是CAP定理?
CAP定理也稱為Brewer定理。它指出,分布式資料存儲不可能同時滿足CAP,隻能滿足CAP其中的兩部分。
- 一緻性
- 可用性
-
分區容錯性
# 一緻性:
即在執行操作之後,資料也應保持一緻。這意味着一旦寫入資料,以後的任何讀取請求都應包含該資料。例如,更新訂單狀态後,所有用戶端都應該能夠看到相同的資料。
# 可用性:
該資料庫應始終可用且響應迅速。它不應有任何當機時間。
分區容限:
分區容限意味着即使伺服器之間的通信不穩定,系統也應繼續運作。例如,可以将伺服器劃分為可能無法互相通信的多個組。在此,如果資料庫的一部分不可用,則其他部分始終不受影響。
# 最終一緻性
“最終一緻性”是指在多台計算機上具有資料副本,以獲得高可用性和可伸縮性。是以,必須将在一台計算機上對任何資料項所做的更改複制到其他副本。
資料複制可能不是瞬時的,因為某些副本将在适當的時間範圍内立即更新,而另一些副本将在一段時間内更新。這些副本可能是互相的,但随着時間的推移,它們将變得一緻。是以,稱為最終保持一緻。
BASE: Basically Available, Soft state, Eventual consistency
• 基本上,可用性表示根據CAP定理,DB始終可用
• Soft state意味着即使沒有輸入;系統狀态可能會改變
• 最終的一緻性意味着系統将随着時間的推移變得一緻
# NoSQL的優勢
• 可用作主要資料庫或分析資料源
• 大資料能力
• 沒有單點故障
• 輕松複制
• 無需單獨的緩存層
• 它提供了快速的性能和水準可伸縮性。
• 可以平等地處理結構化,半結構化和非結構化資料
• 易于使用且靈活的面向對象程式設計
• NoSQL資料庫不需要專用的高性能伺服器
• 支援關鍵的開發語言和平台
• 比使用RDBMS易于實作
• 它可以用作線上應用程式的主要資料源。
• 處理大資料,以管理資料的速度,多樣性,數量和複雜性
• 在分布式資料庫和多資料中心操作方面表現出色
• 無需使用特定的緩存層來存儲資料
• 提供靈活的架構設計,可以輕松進行更改而不會造成停機或服務中斷
# NoSQL的缺點
• 沒有标準化規則
• 有限的查詢功能
• RDBMS資料庫和工具相對成熟
• 它不提供任何傳統的資料庫功能,例如同時執行多個事務時的一緻性。
• 當資料量增加時,由于密鑰變得困難,很難維護唯一值
• 與關系資料配合使用效果不佳
• 對于新開發者而言,學習曲線是僵硬的
• 開源選項在企業中并不那麼受歡迎。
摘要
• NoSQL是非關系DMS,它不需要固定的架構,可以避免聯接,并且易于擴充
• NoSQL資料庫的概念在處理大量資料的Internet巨頭(例如Google,Facebook,Amazon等)中廣受歡迎
• 1998年,Carlo Strozzi在他的輕量級開源關系資料庫中使用了NoSQL一詞。
• NoSQL資料庫永遠不會遵循關系模型,因為它要麼沒有架構,要麼擁有寬松的架構
• NoSQL資料庫的四種類型是1)。基于鍵值對的2)。面向列的圖3)。基于圖的4)。面向文檔
• NOSQL可以平等地處理結構化,半結構化和非結構化資料
• CAP定理由一緻性,可用性和分區容忍度三個詞組成
• BASE代表 Basically Available, Soft state, Eventual consistency
• “最終一緻性”是指在多台計算機上具有資料副本,以獲得高可用性和可伸縮性
• NOSQL提供有限的查詢功能
源位址:
https://www.guru99.com/nosql-tutorial.html