爲何會出現NoSQL數據庫

爲何會出現NoSQL數據庫

1、總結

一句話總結:sql不支持分佈式且且有性能瓶頸且不支持分佈式,不一樣NoSQL適合不一樣的場景

 

一、"不一樣的NoSQL數據庫只適合不一樣的場景"這句話對麼?

對的,NoSQL數據庫是針對點的,關係型數據庫是針對面的前端

 

二、NoSQL數據庫有哪四種?

KV鍵值對:redis,內容緩存,主要用於處理大量數據的高訪問負載等; 
②bson:文檔數據庫,MongoDB 是一個基於分佈式文件存儲的數據庫,C++編寫的。皆在爲web應用提供可擴展的高性能數據存儲解決方案。它介於關係型數據庫與非關係型數據庫之間的產品,是非關係型中功能最豐富的,且最像關係型數據庫的; 
列存儲數據庫:分佈式文件系統 
圖關係型數據庫 :它不是放圖的,放的是 關係:如朋友圈社交網絡等。專一於關係圖譜。
web

 

三、數據庫主從複製和讀寫分離是什麼?

主從複製:往主服務裏插入一條數據的同時,也往從服務裏寫入一條數據(備份、容災) 
讀寫分離:通常主做爲寫(20%),從做爲讀(80%)redis

 

 

 

2、互聯網背景下爲何會出現NoSQL?

1、傳統應用模式 (ALL IN ONE) 


全部的東西都部署在一臺機器上,包括站點、數據庫、文件等等(如今阿里雲的出現方便了不少)。核心工做就是:前端傳過來一些數據,而後業務邏輯層拼裝,而後訪問數據庫,數據庫返回數據,數據拼裝成頁面,最終返回到瀏覽器。 
這時候數據庫可能會率先成爲瓶頸在流量峯值期容易宕機,第一能夠優化sql語句,第二,典型的應用都是讀數據庫頻率遠大於寫數據庫頻率。這時候能夠採用讀寫分離,多讀一寫的數據庫架構(通常是20%是寫庫,80%是讀庫);算法

這時候的主要矛盾點已經變爲業務複雜度的提高帶來的耦合,致使升級困難,開發容易引入bug,維護成本也提高sql

一、Memcached 分佈式緩存服務器,經過文件緩存來緩解數據庫壓力,爲多個web服務器提供了一個共享的高性能緩存服務。在Memcached服務器上,又發展了根據hash算法來進行多臺Memcached緩存服務的擴展,而後又出現了一致性hash來解決增長或減小緩存服務器致使從新hash帶來的大量緩存失效的弊端。數據庫

不足: 
因爲數據庫的寫入壓力增長,Memcached只能緩解數據庫的讀取壓力。讀寫集中在一個數據庫上讓數據庫不堪重負,大部分網站開始使用主從複製技術來達到讀寫分離,以提升讀寫性能和讀庫的可擴展性。Mysql的master-slave模式成爲這個時候的網站標配了。json

二、主從複製讀寫分離 
主從複製:往主服務裏插入一條數據的同時,也往從服務裏寫入一條數據(備份、容災) 
讀寫分離:通常主做爲寫(20%),從做爲讀(80%)數組

三、在Memcached 高速緩存、MySQL主從複製,讀寫分離的基礎之上,因爲大量數據的增長,寫壓力開始出現瓶頸,因爲MyISAM使用表鎖,在高併發下會出現嚴重的鎖問題,大量的高併發MySQL應用開始使用InnoDB引擎代替MyISAM。 
同時開始使用分庫分表來緩解壓力。 
MySQL的擴展性差(須要複雜的技術來實現),大數據下IO壓力大,表結構更改困難,正是當前使用MySQL的開發人員面臨的問題。瀏覽器

四、爲何用NoSQL? 
今天咱們能夠經過第三方平臺(如:Google,Facebook等)能夠很容易的訪問和抓取數據。用戶的我的信息,社交網絡,地理位置,用戶生成的數據和用戶操做日誌已經成倍的增長。 
咱們若是要對這些用戶數據進行挖掘,那SQL數據庫已經不適合這些應用了, NoSQL數據庫的發展也卻能很好的處理這些大的數據。緩存

 

2、什麼是NoSQL?

NoSQL(NoSQL = Not Only SQL ),意即「不只僅是SQL」, 泛指非關係型的數據庫。

一、做用 
NoSQL數據庫種類繁多,可是一個共同的特色都是去掉關係數據庫的關係型特性。數據之間無關係,這樣就很是容易擴展。也無形之間,在架構的層面上帶來了可擴展的能力。 
NoSQL數據庫都具備很是高的讀寫性能,尤爲在大數據量下,這得益於它的無關係性,數據庫的結構簡單。 
NoSQL無需事先爲要存儲的數據創建字段,隨時能夠存儲自定義的數據格式。而在關係數據庫裏,增刪字段是一件很是麻煩的事情。若是是很是大數據量的表,增長字段簡直就是一個噩夢。

二、關係型數據庫(RDBMS)VS 非關係型數據庫(NoSQL) 
RDBMS:

  • 高度組織化結構化數據
  • 結構化查詢語言(SQL)
  • 數據和關係都存儲在單獨的表中。
  • 數據操縱語言,數據定義語言
  • 嚴格的一致性
  • 基礎事務

    NoSQL:

  • 表明着不只僅是SQL
  • 沒有聲明性查詢語言
  • 沒有預約義的模式
  • 鍵 - 值對存儲,列存儲,文檔存儲,圖形數據庫
  • 最終一致性,而非ACID屬性
  • 非結構化和不可預知的數據
  • CAP定理
  • 高性能,高可用性和可伸縮性

總結: RDBMS 和NoSQL都有各自的特色和使用的應用場景,讓關係數據庫關注在關係上,NoSQL關注在存儲上

 

3、互聯網時代面臨的問題 

一、3V 和 3高 
3V: 海量的數據流量;多樣(商品種類、各式各樣);實時的數據需求 
3高: 高併發;高可用;高性能

4、NoSQL 數據模型簡介 
傳統的關係型數據模型的設計基本上是 基於數據庫範式創建1:1 / 1:N / N:N,主外鍵的關係設計。 
一、NoSQL的設計: 
使用Bson() 相似於json的一種二進制形式的存儲格式,簡稱 Binary JSON,它也一樣支持內嵌的文檔對象和數組對象。 
二、聚合模型 
高併發的操做是不太建議有關聯查詢的,互聯網公司用冗餘數據來避免關聯查詢,分佈式事務是支持不了太多的併發的。 
三、NoSQL數據庫的四大分類: 
KV鍵值對:redis,內容緩存,主要用於處理大量數據的高訪問負載等; 
②bson:文檔數據庫,MongoDB 是一個基於分佈式文件存儲的數據庫,C++編寫的。皆在爲web應用提供可擴展的高性能數據存儲解決方案。它介於關係型數據庫與非關係型數據庫之間的產品,是非關係型中功能最豐富的,且最像關係型數據庫的; 
列存儲數據庫:分佈式文件系統 
圖關係型數據庫 :它不是放圖的,放的是 關係:如朋友圈社交網絡等。專一於關係圖譜

 

參考:互聯網背景下爲何會出現NoSQL? - CSDN博客https://blog.csdn.net/u013709087/article/details/78313923

相關文章
相關標籤/搜索