《學習筆記-大數據存儲》要點:
本文介紹了學習筆記-大數據存儲,希望對您有用。如果有疑問,可以聯系我們。
本日了解了一下網站的大數據存儲方面的內容,下面將我學習到的內容和大家分享一下.
首先介紹一下現在主流的數據庫:Mysql,Oracle,db2,Nosql(非關系型數據庫,redis,Mongodb),本文主要介紹的是Mysql.
對于Mysql,以前我總有這樣的誤解,便是中小型公司使用,對于大數據量,mysql并不能很好的支持.其實不然,據我了解,淘寶便是使用的Mysql數據庫,由此可見,Mysql對于大數據量存儲還是可行的.下面就簡單介紹一下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三個運行中的數據庫發生故障,會立即激活相對應的休眠數據庫,保障服務的不間斷運行.
以上內容便是我學習大數據存儲的學習筆記,水平有限,不喜勿噴,當然歡迎大神多多指導,共同進步.
歡迎參與《學習筆記-大數據存儲》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/7073.html