阿里P8架構師談:NoSQL和SQL的區別,NoSQL的使用場景和選型比較

什麼是NoSQL

NoSQL,指的是非關係型的數據庫。NoSQL有時也稱做Not Only SQL的縮寫,是對不一樣於傳統的關係型數據庫的數據庫管理系統的統稱,它具備非關係型、分佈式、不提供ACID的數據庫設計模式等特徵。java

NoSQL用於超大規模數據的存儲。(例如谷歌或Facebook天天爲他們的用戶收集萬億比特的數據)。這些類型的數據存儲不須要固定的模式,無需多餘操做就能夠橫向擴展。面試

SQL 和 NoSQL 的區別

 

SQL數據庫適合那些需求肯定和對數據完整性要去嚴格的項目。NoSQL數據庫適用於那些對速度和可擴展性比較看重的那些不相關的,不肯定和不斷髮展的需求。簡單來講就是:算法

SQL是精確的。它最適合於具備精確標準的定義明確的項目。典型的使用場景是在線商店和銀行系統。sql

NoSQL是多變的。它最適合於具備不肯定需求的數據。典型的使用場景是社交網絡,客戶管理和網絡分析系統。數據庫

SQL和Nosql的選型和比較

1.關係型數據庫和非關係型數據庫設計模式

SQL (Structured Query Language) 數據庫,指關係型數據庫。主要表明:SQL Server,Oracle,MySQL等。緩存

NoSQL(Not Only SQL)泛指非關係型數據庫,主要表明:MongoDB,Redis等。網絡

2.關係型數據庫適合存儲結構化數據數據結構

如用戶的賬號、地址等:架構

1)這些數據一般須要作結構化查詢,好比join,這時候,關係型數據庫就要勝出一籌

2)這些數據的規模、增加的速度一般是能夠預期的

3)保證數據的事務性、一致性要求。

3.NoSQL適合存儲非結構化數據

如發微博、文章、評論:

1)這些數據一般用於模糊處理,如全文搜索、機器學習

2)這些數據是海量的,並且增加的速度是難以預期的,

3)根據數據的特色,NoSQL數據庫一般具備無限(至少接近)伸縮性

4)按key獲取數據效率很高,可是對join或其餘結構化查詢的支持就比較差

目前許多大型互聯網項目都會選用MySQL(或任何關係型數據庫) + NoSQL的組合方案。

NoSQL的常見類型和比較

有四種常見的 NoSQL 數據庫類型:列式、文檔、圖形和內存鍵值。

 

1.列式數據

顧名思義,是按列存儲數據的。最大的特色是方便存儲結構化和半結構化數據,方便作數據壓縮,對針對某一列或者某幾列的查詢有很是大的IO優點。

1)對應的nosql: HBase,BigTable等。

2)典型應用場景:按列存儲,針對某一列或者某幾列的查詢有很是大的IO優點。

3)優勢:查找速度快,可擴展性強,更容易進行分佈式擴展。

4)缺點:功能相對侷限。

2.文檔數據庫

旨在將半結構化數據存儲爲文檔,一般採用 JSON 或 XML 格式。與傳統關係數據庫不一樣的是,每一個 NoSQL 文檔的架構是不一樣的,可以讓您更加靈活地整理和存儲應用程序數據並減小可選值所需的存儲。

1)對應的nosql:CouchDB, MongoDb

2)典型應用場景:存儲相似JSON格式的內容,可對某些字段創建索引功能,是最像關係型的數據庫。

3)優勢:數據結構要求不嚴格,表結構可變,不須要像關係型數據庫同樣須要預先定義表結構。

4)缺點:查詢性能不高,並且缺少統一的查詢語法。

3.圖形數據庫

可存儲頂點以及稱爲邊緣的直接鏈路。圖形數據庫能夠在 SQL 和 NoSQL 數據庫上構建。頂點和邊緣能夠擁有各自的相關屬性。

1)數據模型:圖結構

2)典型應用場景:社交網絡,推薦系統等。專一於構建關係圖譜,善於處理大量複雜、互鏈接、低結構化的數據,數據每每變化迅速,且查詢頻繁。

3)優勢:利用圖結構相關算法。好比最短路徑尋址,N度關係查找等。

4)缺點:不少時候須要對整個圖作計算才能得出須要的信息,並且這種結構不太好作分佈式的集羣方案。

4.內存鍵值存儲

能夠經過key快速查詢到其value。通常來講,存儲無論value的格式,照單全收,是針對讀取密集型應用程序工做負載(例如社交網絡、遊戲、媒體共享和 Q&A 門戶)。內存緩存可將重要數據存儲在內存中以實現低延遲訪問,從而提升應用程序性能。

1)對應的nosql:Redis,Memcached等

2)典型應用場景:內容緩存,主要用於處理大量數據的高訪問負載,也用於一些日誌系統等等。

3)優勢:查找速度快。

4)缺點:數據無結構化,一般只被看成字符串或者二進制數據。

若是對java微服務、分佈式、高併發、高可用、大型互聯網架構技術、面試經驗交流。

能夠加我架構圈子羣:692-845-439 領取資料,羣內天天更新資料,免費領取。

相關文章
相關標籤/搜索