學習筆記-大數據存儲

大數據 MySQL NoSQL CPU 小虎動物園 小虎動物園 2017-10-08

今天瞭解了一下網站的大數據存儲方面的內容,下面將我學習到的內容和大家分享一下。

首先介紹一下現在主流的數據庫:Mysql,Oracle,db2,Nosql(非關係型數據庫,redis,Mongodb),本文主要介紹的是Mysql。

對於Mysql,以前我總有這樣的誤解,就是中小型公司使用,對於大數據量,mysql並不能很好的支持。其實不然,據我瞭解,淘寶就是使用的Mysql數據庫,由此可見,Mysql對於大數據量存儲還是可行的。下面就簡單介紹一下Mysql為了應對大數據量所採用的技術。

Mysql主從技術(負載),下面是原理圖:

學習筆記-大數據存儲

它的工作原理就是:主數據庫會把所有增刪改的操作記錄到Binary Log這個日誌表中,然後同步到從數據庫,從數據庫執行查詢操作,這就實現了分流,也就是我們所說的負載技術。

大數據量的存儲,會引發很多的問題,比如Mysql一張表數據如果超過了一千萬行,那麼就會嚴重影響CPU性能。那麼在Mysql中如何去解決呢?

Mysql分庫分表技術:

它的工作原理就是:主數據庫會把所有增刪改的操作記錄到Binary Log這個日誌表中,然後同步到從數據庫,從數據庫執行查詢操作,這就實現了分流,也就是我們所說的負載技術。

大數據量的存儲,會引發很多的問題,比如Mysql一張表數據如果超過了一千萬行,那麼就會嚴重影響CPU性能。那麼在Mysql中如何去解決呢?

Mysql分庫分表技術:

學習筆記-大數據存儲

Mysql中分表主要分為兩種:垂直分表和水平分表。其中垂直分表很少用,以為我們在設計數據庫的時候不可能將數據庫表字段設計的過多,一般也就十幾個二十多個,所以沒有必要使用垂直分表。水平分表可以很好的解決數據量大的問題,但是它也有很多的弊端:比如你要將一個表分成兩個表,那麼原先的sql語句就得修改,這樣會使得程序的判斷邏輯越來越複雜,導致程序的維護代價高。

另外一種技術就是Mysql分區技術

MySQL的分區技術不同與之前的分表技術,它與水平分表有點類似,但是它在邏輯層進行的水平分表, 對與應用程序而言它還是一張表, MySQL5.1版本後有4種分區類型:

一:RANGE分區(用的最多):基於屬於一個給定連續區間的列值(字段),把多行分配給分區 (將一個表拆分成:索引文件,數據文件分片存儲 )

二:LIST分區:類似於按range分區,區別在於list分區是基於列值匹配一個離散值集合中的某個值來進行選擇(列裡面的值是固定值時候來進行分區,而且是枚舉類型的值適合用list分區 -->比如說 性別:男,女)

三:HASH分區:基於用戶定義的表達式的返回值來進行選擇的分區,改表達式使用將要插入到表中的這些行的列值計算,這個函數可以包含MySQL中有效的、產生負整數值的任何表達式(把每次插入的數據隨機的平均的分配到多個分區裡面,最終多個分區裡面的數據時平均分配的,但是每個分區裡面的數值肯能不太一樣,因為是隨機分配的,一般可以用來做MySQL分區的測試來使)

四:KEY分區:類似於按hash分區,區別在於key分區只支持計算一列或多列,且MySQL服務器提供其自身的哈希函數

分區技術能很好的解決分表技術所帶來的弊端,成為解決海量數據存儲的有力方法。

最後給大家說一下Mysql集群技術

學習筆記-大數據存儲

Mysql集群

Mysql集群其實就是冗餘技術,為了保障數據庫的持續運行,在圖中,ACE三個數據庫處於運行狀態,BDF處於休眠狀態,一旦ACE三個運行中的數據庫發生故障,會立即激活相對應的休眠數據庫,保障服務的不間斷運行。

以上內容就是我學習大數據存儲的學習筆記,水平有限,不喜勿噴,當然歡迎大神多多指導,共同進步。

學習筆記-大數據存儲

相關推薦

推薦中...