阿里P8架構師談:NoSQL和SQL的區別,NoSQL的使用場景和選型比較
什麼是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)缺點:資料無結構化,通常只被當作字串或者二進位制資料。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31557820/viewspace-2284699/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL、NoSQL和NewSQL的優缺點比較SQL
- 淺談常見的NoSQL技術方案和選型SQL
- 常用 NoSQL 比較SQL
- 企業級NoSQL與開源NoSQL的區別SQL
- 【筆記】RDBMS和NOSQL之比較筆記SQL
- 一網打盡當下NoSQL型別、適用場景及使用公司SQL型別
- MongoDB、Cassandra 和 HBase 三種 NoSQL 資料庫比較MongoDBSQL資料庫
- 非關係型資料庫(NOSQL)和關係型資料庫(SQL)區別詳解資料庫SQL
- SQL與NoSQL(關係型與非關係型)資料庫的區別SQL資料庫
- Nosql/Redis/ttserver/Flare/memcache比較SQLRedisTTSServer
- NoSQL資料庫概覽及其與SQL語法的比較SQL資料庫
- 阿里P8級架構師淺談Java架構師的工作都幹些什麼?阿里架構Java
- Java中的引用型別和使用場景Java型別
- 談談redis,memcache的區別和具體應用場景Redis
- 排名前十的SQL和NoSQL資料庫SQL資料庫
- SQL vs NoSQL:如何選擇?SQL
- Nosql 資料管理系統與模型的比較SQL模型
- lucene和NoSQL的結合SQL
- 全棧工程師和架構師的區別全棧工程師架構
- 大前端技術選型總結和一些架構比較前端架構
- 轉享:NoSQL 圖資料庫比較SQL資料庫
- 你和架構師的的區別是什麼?架構
- NoSQL資料庫的35個應用場景SQL資料庫
- Oracle date 型別比較和String比較Oracle型別
- 粉碎5個NoSQL流言:各司其職 NoSQL的出現比關係型更早SQL
- B/S和C/S架構的比較架構
- ArrayList和LinkedList底層原理的區別和使用場景
- NoSQL概述和Redis的安裝SQLRedis
- 關於Ajax和websocket的區別以及使用場景!Web
- 最受歡迎的 NoSQL 和關係型資料庫SQL資料庫
- Vue和微信小程式的區別、比較Vue微信小程式
- Transformer和MoE架構比較ORM架構
- sql與nosql的權衡SQL
- js中call,apply和bind方法的區別和使用場景JSAPP
- Nosql 資料庫 MemCache、Redis、MongoDB 的區別SQL資料庫RedisMongoDB
- SOA架構和微服務架構的區別架構微服務
- MySQL 的 timestamp 和 datetime 型別比較MySql型別
- MyISAM和InnoDB的主要區別和應用場景