什麼是NoSQL
NoSQL,指的是非關係型的資料庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同於傳統的關係型資料庫的資料庫管理系統的統稱,它具有非關係型、分散式、不提供ACID的資料庫設計模式等特徵。
NoSQL用於超大規模資料的儲存。(例如谷歌或Facebook每天為他們的使用者收集萬億位元的資料)。這些型別的資料儲存不需要固定的模式,無需多餘操作就可以橫向擴充套件。
SQL 和 NoSQL 的區別
SQL資料庫適合那些需求確定和對資料完整性要去嚴格的專案。NoSQL資料庫適用於那些對速度和可擴充套件性比較看重的那些不相關的,不確定和不斷髮展的需求。簡單來說就是:
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)缺點:資料無結構化,通常只被當作字串或者二進位制資料。
1、具有1-5工作經驗的,面對目前流行的技術不知從何下手,需要突破技術瓶頸的。
2、在公司待久了,過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的。
3、如果沒有工作經驗,但基礎非常紮實,對java工作機制,用設計思想,常用java開發框架掌握熟練的。
4、覺得自己很牛B,一般需求都能搞定。但是所學的知識點沒有系統化,很難在技術領域繼續突破的。
5. 群號:高階架構群 692845439 備註好資訊!
6.阿里Java高階大牛直播講解知識點,分享知識,多年工作經驗的梳理和總結,帶著大家全面、科學地建立自己的技術體系和技術認知!
7.小白勿加
java架構群:692845439 一起交流