天天看點

「資料庫」學了那麼多 NoSQL 資料庫 NoSQL 究竟是什麼

作者:架構思考

一、NoSQL 簡史

NoSQL 一詞最早出現于 1998 年,是 Carlo Strozzi 開發的一個輕量、開源、不提供 SQL 功能的關系資料庫。

2009 年,Last.fm 的 Johan Oskarsson 發起了一次關于分布式開源資料庫的讨論,來自 Rackspace 的 Eric Evans 再次提出了 NoSQL 的概念,這時的 NoSQL 主要指非關系型、分布式、不提供 ACID 的資料庫設計模式。

2009 年在亞特蘭大舉行的"no:sql(east)"讨論會是一個裡程碑,其口号是"select fun, profit from real_world where relational=false"。是以,對 NoSQL 最普遍的解釋是"非關聯型的",強調 Key-Value Stores 和文檔資料庫的優點,而不是單純的反對 RDBMS。

二、什麼是 NoSQL

「資料庫」學了那麼多 NoSQL 資料庫 NoSQL 究竟是什麼

NoSQL(Not Only SQL),意思是"不僅僅是 SQL",指的是非關系型資料庫,是對不同于傳統的關系型資料庫的資料庫管理系統的統稱。

NoSQL 用于超大規模資料的存儲。這些類型的資料存儲不需要固定的模式,無需多餘操作就可以橫向擴充。

三、為什麼使用 NoSQL

随着網際網路的飛速發展與普及,網民上網沖浪時所産生資料也逐日增多,從 GB 到 TB 到 PB。這些資料有很大一部分都是由關系型資料庫管理系統(RDBMS)來進行處理的。

由于關系型資料庫的範式限制、事務特性、磁盤 IO 等特點,若伺服器使用關系型資料庫,當有大量資料産生時,傳統的關系型資料庫已經無法滿足快速查詢與插入資料的需求。NoSQL 的出現解決了這一危機。它通過降低資料的安全性,減少對事務的支援,減少對複雜查詢的支援,擷取性能上的提升。但是,在某些特定場景下 NoSQL 仍然不是最佳人選,比如一些絕對要有事務與安全名額的場景。

NoSQL 是一項全新的資料庫革命性運動,早期就有人提出,發展至 2009 年趨勢越發高漲。NoSQL 的擁護者們提倡運用非關系型的資料存儲,相對于鋪天蓋地的關系型資料庫運用,這一概念無疑是一種全新的思維的注入。

四、RDBMS vs. NoSQL

「資料庫」學了那麼多 NoSQL 資料庫 NoSQL 究竟是什麼

五、常見的資料庫管理系統

根據 DB-Engines:https://db-engines.com/en/ranking 的排行,本文截取了排行榜 Top 50 如下圖所示。DB-Engines 排名根據資料庫管理系統的受歡迎程度對其進行排名。該排名每月更新一次。

「資料庫」學了那麼多 NoSQL 資料庫 NoSQL 究竟是什麼

六、NoSQL 資料庫四大家族

1、鍵值(Key-Value)存儲

特點:鍵值資料庫就像傳統語言中使用的哈希表。通過 Key 添加、查詢或者删除資料。

優點:查詢速度快。

缺點:資料無結構化,通常隻被當作字元串或者二進制資料存儲。

應用場景:内容緩存、使用者資訊比如會話、配置資訊、購物車等,主要用于處理大量資料的高通路負載。

NoSQL 代表:Redis、Memcached...

2、文檔(Document-Oriented)存儲

特點:文檔資料庫将資料以文檔的形式儲存,類似 JSON,是一系列資料項的集合。每個資料項都有一個名稱與對應的值,值既可以是簡單的資料類型,如字元串、數字和日期等;也可以是複雜的類型,如有序清單和關聯對象。

優點:資料結構要求不嚴格,表結構可變,不需要像關系型資料庫一樣需要預先定義表結構。

缺點:查詢性能不高,缺乏統一的查詢文法。

應用場景:日志、 Web 應用等。

NoSQL 代表:MongoDB、CouchDB...

3、列(Wide Column Store/Column-Family)存儲

特點:列存儲資料庫将資料儲存在列族(Column Family)中,将多個列聚合成一個列族,鍵仍然存在,但是它們的特點是指向了多個列。舉個例子,如果我們有一個 Person 類,我們通常會一起查詢他們的姓名和年齡而不是薪資。這種情況下,姓名和年齡就會被放入一個列族中,而薪資則在另一個列族中。

優點:列存儲查找速度快,可擴充性強,更容易進行分布式擴充,适用于分布式的檔案系統,應對分布式存儲的海量資料。

缺點:查詢性能不高,缺乏統一的查詢文法。

應用場景:日志、 分布式的檔案系統(對象存儲)、推薦畫像、時空資料、消息/訂單等。

NoSQL 代表:Cassandra、HBase...

4、圖形(Graph-Oriented)存儲

特點:圖形資料庫允許我們将資料以圖的方式儲存。

優點:圖形相關算法。比如最短路徑尋址,N 度關系查找等。

缺點:很多時候需要對整個圖做計算才能得出需要的資訊,分布式的叢集方案不好做,處理超級節點乏力,沒有分片存儲機制,國内社群不活躍。

應用場景:社交網絡,推薦系統等。專注于建構關系圖譜。

NoSQL 代表:Neo4j、Infinite Graph...

七、NoSQL 的優缺點

優點

  • 高可擴充性
  • 沒有标準化
  • 分布式計算
  • 有限的查詢功能(到目前為止)
  • 低成本

缺點

  • 最終一緻是不直覺的程式
  • 架構的靈活性,半結構化資料
  • 沒有複雜的關系

八、總結

NoSQL 資料庫在以下幾種情況下比較适用:

  • 資料模型比較簡單
  • 需要靈活性更強的 IT 系統
  • 對資料庫性能要求較高
  • 不需要高度的資料一緻性
  • 對于給定的 Key,比較容易映射複雜值的環境

最最重要的一點,寫在最後:NoSQL 資料庫不是為了代替關系型資料庫。而是計算機科學發展到一定階段為了解決一定問題而必然出現的技術。

文章來源:https://mp.weixin.qq.com/s?__biz=MzA4MDEwNTI1NA%3D%3D&mid=2459063208&idx=1&sn=7ae0d871571aa68ba178f75b0e5ded5f&scene=45#wechat_redirect