[Redis 系列]redis 學習一,資料庫的演進及 Nosql 的初步認知

小魔童哪吒發表於2022-01-08

Nosql

為什麼要用 Nosql ?

我們們一起來看看資料庫的發展過程

1、單機的 MYSQL 時代

應用訪問資料庫是 應用 – DAL 資料庫訪問層 – DB 資料庫

image-20210815204834911

在單機的 MYSQL 時代,資料都不會太大,而且網頁也是靜態網頁,一般網站的訪問量也小,因此單資料庫就完全夠用了

上面這種網站,瓶頸就會很明顯:

  • 資料量變得大了,一個機器放不下如何處理
  • 資料的索引 (B+ Tree),一個機器的記憶體放不下了如何處理
  • 讀寫的訪問量,一個伺服器承受不了瞭如何處理

隨著歷史程式的演進,上面這種網站必然會面臨如上問題,就必須要解決

2、Memecache + MYSQL + 垂直拆分

為了解決上面的問題,一個機器處理不過來,我們就放多個機器,但是如何保證資料的一致性呢?

因此就想到了讀寫分離,專門指定一個資料庫用於寫資料,其他資料庫用於讀取資料,並且其他的資料庫會同步用於寫資料的 MYSQL 中的資料

漸漸的發現每次請求,都需要去運算元據庫,這樣耗時耗力,需要改變

因此在訪問資料庫之前,加入了快取伺服器 Memcache,第一次讀取資料庫,第二次讀取的時候在資料庫不改變的情況下,讀取 Memcache 中的資料,減小資料庫的壓力

這一塊發展歷程是這樣的:

優化資料庫的結構和索引 – 檔案快取(IO) – 快取伺服器 Memcache

3、分庫分表 + 水平拆分 + MYSQL 叢集

隨著技術發展,業務也跟著飛越發展,也就帶來了更多的問題

最開始我們使用的 MYSQL 使用的引擎的是 MyISAM,他是表鎖,十分影響效率,當在高併發的情況下,問題尤為明顯

後面就有了 MYSQL 的InnoDB 引擎,他是行鎖,隨著業務的不停增長,就有了 MYSQL 叢集

使用叢集的方式,每一個叢集儲存一部分資料,若資料量仍然上升,那麼繼續增加叢集部署

4、現在

由於現代的資料量真的非常大了,大資料時代了,MYSQL 關係型資料庫就不夠用了,現在資料量多,變化快,以前使用 MYSQL ,設計的時候,就得把所有欄位,可能用到的欄位,全部想清楚,設計明白,對於現在瞬息萬變的時代,這就很難了

現在就會期望,例如儲存檔案的有檔案伺服器,儲存圖片的有圖片伺服器,有專門的資料庫來存這些資料,那麼 MYSQL 的壓力就會小很多

現在 的網際網路專案簡單來看是這個樣子的

對於這樣的網際網路專案,就非常需要 Nosql 了,Nosql 能處理上述出現的問題

Nosql 是什麼?

Nosql

Not only sql , 不僅僅是 sql

泛指非關係型資料庫,隨著 web2.0 網際網路的誕生,傳統的關係型資料庫很難對付 web2.0 時代了

例如現在網際網路使用者需要儲存個人資訊,定位資訊,社交網路等等資料,Nosql 對於這些資料儲存不需要用一個固定的格式就可以儲存,而且很輕易就可以橫向擴充套件,例如Map<string,interface{}> ,使用鍵值對來控制就很 nice 了

Nosql 的特點

  • 方便擴充套件,因為資料之間沒有關係,很容易擴充套件
  • 高效能,例如 redis 1 秒能寫 8 萬次,能讀 11 萬次,且 Nosql 的儲存是記錄級別的,是一種細粒度的快取,因此效能高
  • 資料型別多樣,不需要事先設計資料庫

我們們來對比一下傳統型的關係型資料庫(RDBMS)和 Nosql

RDBMS

  • 結構化組織
  • sql 語句
  • 資料和關係都存在單獨的表中
  • 資料操作,資料定義語言
  • 嚴格的一致性
  • 事務處理 等等

Nosql

  • 不僅僅是資料
  • 沒有固定的查詢語言
  • 鍵值對儲存,列儲存,檔案儲存,圖形資料庫 例如社交關係等等
  • 最終一致性
  • CAP 定理和 BASE 原理
  • 高可用,高效能,高可擴充套件

順便一起分享一下 3 V 和 3 高分別是什麼:

3 V,主要是用來描述問題的:

  • 海量資料 volume
  • 多樣性 variety
  • 實時性 velocity

3 高,主要是用來描述對程式的要求

  • 高併發
  • 高效能
  • 高可擴充套件

Nosql 的四大分類

KV 鍵值對:

  • Redis

C 編寫的,單程式的 Nosql, 阿里,騰訊,百度,位元組等公司都在用使用

文件型資料庫:

  • Mongdb

Mongdb 是一個基於分散式檔案儲存的資料庫,C++ 編寫的,主要用來處理大量的文件

Mongdb 還是一個介於關係型資料庫和非關係型資料庫中間的產品,他是非關係型資料庫中功能最豐富的,最像關係型資料庫的非關係型資料庫

列儲存型資料庫:

  • HBase
  • 分散式檔案系統

圖關係型資料庫:

  • Neo4j
  • InfoGrid

圖關係型資料庫不是儲存圖形,而是存放關係,例如社交關係網路

我們們來對比一下上述四種分類:

圖片來源於網路,這張圖片已經很清晰的描述了KV 鍵值對,文件型資料庫,列儲存資料庫,圖形資料庫的案例,資料模型,優缺點,現在對於 Nosql 會有了一個大體的認知了吧

歡迎點贊,關注,收藏

朋友們,你的支援和鼓勵,是我堅持分享,提高質量的動力

好了,本次就到這裡

技術是開放的,我們的心態,更應是開放的。擁抱變化,向陽而生,努力向前行。

我是小魔童哪吒,歡迎點贊關注收藏,下次見~

本作品採用《CC 協議》,轉載必須註明作者和本文連結
關注微信公眾號:小魔童哪吒

相關文章