Nosql
為什麼要用 Nosql ?
我們們一起來看看資料庫的發展過程
1、單機的 MYSQL 時代
應用訪問資料庫是 應用 – DAL 資料庫訪問層 – DB 資料庫
在單機的 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 協議》,轉載必須註明作者和本文連結