1. 程式人生 > >網際網路背景下為什麼會出現NoSQL?

網際網路背景下為什麼會出現NoSQL?

一、傳統應用模式 (ALL IN ONE)
所有的東西都部署在一臺機器上,包括站點、資料庫、檔案等等(現在阿里雲的出現方便了很多)。核心工作就是:前端傳過來一些資料,然後業務邏輯層拼裝,然後訪問資料庫,資料庫返回資料,資料拼裝成頁面,最終返回到瀏覽器。
這時候資料庫可能會率先成為瓶頸,在流量峰值期容易宕機,第一可以優化sql語句,第二,典型的應用都是讀資料庫頻率遠大於寫資料庫頻率。這時候可以採用讀寫分離,多讀一寫的資料庫架構(一般是20%是寫庫,80%是讀庫);

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

1、Memcached 分散式快取伺服器,通過檔案快取來緩解資料庫壓力,為多個web伺服器提供了一個共享的高效能快取服務。在Memcached伺服器上,又發展了根據hash演算法來進行多臺Memcached快取服務的擴充套件,然後又出現了一致性hash來解決增加或減少快取伺服器導致重新hash帶來的大量快取失效的弊端。

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

2、主從複製讀寫分離
主從複製:往主服務裡插入一條資料的同時,也往從服務裡寫入一條資料(備份、容災)
讀寫分離:一般主作為寫(20%),從作為讀(80%)

3、在Memcached 快取記憶體、MySQL主從複製,讀寫分離的基礎之上,由於大量資料的增加,寫壓力開始出現瓶頸,由於MyISAM使用表鎖,在高併發下會出現嚴重的鎖問題,大量的高併發MySQL應用開始使用InnoDB引擎代替MyISAM。
同時開始使用分庫分表來緩解壓力。
MySQL的擴充套件性差(需要複雜的技術來實現),大資料下IO壓力大,表結構更改困難,正是當前使用MySQL的開發人員面臨的問題。

4、為什麼用NoSQL?
今天我們可以通過第三方平臺(如:Google,Facebook等)可以很容易的訪問和抓取資料。使用者的個人資訊,社交網路,地理位置,使用者生成的資料和使用者操作日誌已經成倍的增加。
我們如果要對這些使用者資料進行挖掘,那SQL資料庫已經不適合這些應用了, NoSQL資料庫的發展也卻能很好的處理這些大的資料。

二、什麼是NoSQL?

NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”, 泛指非關係型的資料庫。

1、作用
NoSQL資料庫種類繁多,但是一個共同的特點都是去掉關係資料庫的關係型特性。資料之間無關係,這樣就非常容易擴充套件。也無形之間,在架構的層面上帶來了可擴充套件的能力。
NoSQL資料庫都具有非常高的讀寫效能,尤其在大資料量下,這得益於它的無關係性,資料庫的結構簡單。
NoSQL無需事先為要儲存的資料建立欄位,隨時可以儲存自定義的資料格式。而在關係資料庫裡,增刪欄位是一件非常麻煩的事情。如果是非常大資料量的表,增加欄位簡直就是一個噩夢。

2、關係型資料庫(RDBMS)VS 非關係型資料庫(NoSQL)
RDBMS:

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

    NoSQL:

  • 代表著不僅僅是SQL
  • 沒有宣告性查詢語言
  • 沒有預定義的模式
  • 鍵 - 值對儲存,列儲存,文件儲存,圖形資料庫
  • 最終一致性,而非ACID屬性
  • 非結構化和不可預知的資料
  • CAP定理
  • 高效能,高可用性和可伸縮性

總結: RDBMS 和NoSQL都有各自的特點和使用的應用場景,讓關係資料庫關注在關係上,NoSQL關注在儲存上。

三、網際網路時代面臨的問題
1、3V 和 3高
3V: 海量的資料流量;多樣(商品種類、各式各樣);實時的資料需求
3高: 高併發;高可用;高效能

四、NoSQL 資料模型簡介
傳統的關係型資料模型的設計基本上是 基於資料庫正規化建立1:1 / 1:N / N:N,主外來鍵的關係設計。
1、NoSQL的設計:
使用Bson() 類似於json的一種二進位制形式的儲存格式,簡稱 Binary JSON,它也同樣支援內嵌的文件物件和陣列物件。
2、聚合模型
高併發的操作是不太建議有關聯查詢的,網際網路公司用冗餘資料來避免關聯查詢,分散式事務是支援不了太多的併發的。
3、NoSQL資料庫的四大分類:
①KV鍵值對:redis,內容快取,主要用於處理大量資料的高訪問負載等;
②bson:文件資料庫,MongoDB 是一個基於分散式檔案儲存的資料庫,C++編寫的。皆在為web應用提供可擴充套件的高效能資料儲存解決方案。它介於關係型資料庫與非關係型資料庫之間的產品,是非關係型中功能最豐富的,且最像關係型資料庫的;
③列儲存資料庫:分散式檔案系統
④圖關係型資料庫 :它不是放圖的,放的是 關係:如朋友圈社交網路等。專注於關係圖譜。

相關推薦

網際網路背景為什麼出現NoSQL

一、傳統應用模式 (ALL IN ONE) 所有的東西都部署在一臺機器上,包括站點、資料庫、檔案等等(現在阿里雲的出現方便了很多)。核心工作就是:前端傳過來一些資料,然後業務邏輯層拼裝,然後訪問資料庫,資料庫返回資料,資料拼裝成頁面,最終返回到瀏覽器。

canvas 繪圖Android環境 出現重影 即出現兩個

解決方案: canvas外層的元素 需要設定style屬性; 其值為"overflow:visible;-webkit-transform: translateZ(0);"這樣就可以了, 我試了下去掉-webkit-transform: translateZ(0);也是

簡述網際網路背景的金融和支付

網際網路金融,本質上是金融,網際網路只是手段。金融是什麼?資金融通,存款、貸款、證券,都是金融。 網際網路金融為什麼能火? 貌似從2013開始開火的,稱之為網際網路金融元年。民間借貸,藉助於網際網路這個工具,開始服務更多的人,滿足各種人的借出接入需求。 對於lende

【Canal】網際網路背景有哪些資料同步需求和解決方案?看完我知道了!!

## 寫在前面 > 在當今網際網路行業,尤其是現在分散式、微服務開發環境下,為了提高搜尋效率,以及搜尋的精準度,會大量使用Redis、Memcached等NoSQL資料庫,也會使用大量的Solr、Elasticsearch等全文檢索服務。那麼,這個時候,就會有一個問題需要我們來思考和解決:那就是資料同

輸入輸出流讀取本機txt文件:不能將中文字元流轉化為char 因為char一個位元組,中文在UTF-8的情況是三個位元組,出現字元流擷取

package interview; import org.junit.Test; import java.io.*; public class TestInOrOutStream { class m { @Test void x(){ Sys

唯品11.11:頻繁黑匣架構背景,看唯品的革命性重構

eBay和唯品會的電商文化縮影 eBay是一個老牌的網際網路公司,是曾經全球最大的交易平臺。我有幸在eBay中國研發中心工作接近10年,曾經在支付平臺、電商平臺、雲平臺等不同開發部門工作過。eBay電商系統設計非常複雜,將系統劃分為一個個小模組,每個團隊和其中每個人

http協議:為什麼請求與響應做到準確誤的對應。不出現請求與響應的錯亂

網際網路通訊是套接字進行通訊的,套接字,是支援TCP/IP的網路通訊的基本操作單元,可以看做是不同主機之間的程序進行雙向通訊的端點,簡單的說就是通訊的兩方的一種約定,用套接字中的相關函式來完成通訊過程。 非常非常簡單的舉例說明下:套接字=Ip address+ TCP/UDP + port。 j

Navicat for MySQL工具中大小寫敏感的情況表名稱出現變小寫

           不知道大家有沒有用Navicat for Mysql 工具操作資料庫,我感覺蠻好用的,但是不知道你們有沒有發現,往指定的庫中匯入sql檔案時,表名竟然不區分大小寫了,真鬱悶!  

VMware12安裝VMware Tools不成功出現 /mnt/hgfs出現共享資料夾

 /mnt/下沒有共享檔案 需安裝VMware Tools 但是安裝VMware Tools會出現很多問題 問題1: 提示出現:the path ""  is not a valid   GCC未安裝 執行:yum -y install gcc 問題2: 提示出現:

【工業網際網路】郭朝暉:工業網際網路平臺背景的工業大資料與智慧製造

4月11日,工業網際網路平臺宣講團第二季第三講繼續開講,由走向智慧研究院工業大資料首席專家、清華

在Navicat for MySQL工具中大小寫敏感的情況表名稱出現變小寫的情況,如何改回大寫呢

  (1)        問題描述                 1﹚ 在Navicat for mysql 修改過表名之後表在後續的跟進中會把表名在未知情況下變成小寫的.                    2﹚ 在大小寫敏感情況下,對欄位中該大寫的字母修改之後發現說

ios系統上拉出現白色背景解決方案

最近做的小程式 測試覺得 ios上拉下拉出現空白 覺得體驗很不友好,在網上找了各種資料 基本大同小異 如果業務需求是需要純背景的話 使用方案一 如果是圖片做背景的話 使用方案二 方案一: 在page.json檔案內配置 :”backgroundColor”:

網際網路架構演進——DUBBO出現背景

隨著網際網路的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分散式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。單一應用架構當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。此時,用於簡化增刪改查工作量的資

程式設計中無窮大的設定 很多人可能設為0x7fffffff,這個數的確是32-bit int的最大值,符號位為0,其他的都是1 但在很多情況,0x7fffffff出現錯誤,比如溢位,這樣兩個無窮大數相

很多人可能設為0x7fffffff,這個數的確是32-bit int的最大值,符號位為0,其他的都是1 但在很多情況下,0x7fffffff會出現錯誤,比如溢位,這樣兩個無窮大數相加會變成負數,還有如在做dijkstra求最短路時,當做鬆弛操作,判斷if (d[u]+w

Theano在windows的正確安裝、出現的問題及解決方法

1. Anaconda 安裝 Anaconda是一個科學計算環境,自帶的包管理器conda很強大。之所以選擇它是因為它內建了python,以及numpy、scipy兩個必要庫和一些其他庫,比起自己安裝要省事。 首先下載Anaconda3-2.2.0-Windows-x

Python2.7 epd free 安裝pandas可能出現的問題

自身為初學小白,在學習《利用Python進行資料分析》時,第一章需要做些準備工作,就是安裝python。自己操作過程中,出現了一些問題,例如不知道在哪裡下載epd、pip、pandas,安裝時不知道如何在命令符中操作,等等,經過查詢其中步驟都可以按照http://blog.

如何做到背景鋪滿螢幕,且不出現橫向滾動條

這兩天做Web頁面有一個需求:是不管背景圖片寬高,需要鋪滿整個螢幕寬度,且不論螢幕大小始終不能出現橫向滾動條。 少廢話,上程式碼先。 html結構關鍵程式碼: <body> <div class="container"> <div c

在linux靜態連結庫存在,但是在連結過程出現undefined reference的錯誤

如題,使用linux編譯程式時,需要靜態連結庫。 在連結過程也已指定靜態庫的路徑及庫名,且連結器能找到指定的庫,但會提示庫中被呼叫的函式undefined reference 這是需要檢查連結庫在連結命令中的位置,要保證依賴該庫的中間檔案或庫在它的前面。 即若一個程式需要l

a標簽 可能出現的bug

ref 當前頁 屬性 定位問題 實現 use 位置 你會 nload 在項目中a標簽遇到過的問題 發現問題:a標簽包裝的按鈕, 如果這個按鈕在頁面滾動後出現,你點擊後,頁面會定位到滾動以前的位置,但是我並不想要這種效果。 分析問題並嘗試: 一開始以為是光標定位問題,用doc

異常的數字拋出,為什麽出現錯誤?(未解決)

為什麽 class a light divide true vid main catch blog #include <iostream> using namespace std; class A { public: A(int a, int b) {