mysql分表、分區

什麼是分表?


分表是將一個大表按照必定的規則分解成多張具備獨立存儲空間的實體表,咱們能夠稱爲子表,每一個表都對應三個文件,MYD數據文件,.MYI索引文件,.frm表結構文件。這些子表能夠分佈在同一塊磁盤上,也能夠在不一樣的機器上。app讀寫的時候根據事先定義好的規則獲得對應的子表名,而後去操做它。mysql

什麼是分區?


分區和分表類似,都是按照規則分解表。不一樣在於分表將大表分解爲若干個獨立的實體表,而分區是將數據分段劃分在多個位置存放,能夠是同一塊磁盤也能夠在不一樣的機器。分區後,表面上仍是一張表,但數據散列到多個位置了。app讀寫的時候操做的仍是大表名字,db自動去組織分區的數據。sql

mysql分表和分區有什麼聯繫呢?


1.都能提升mysql的性高,在高併發狀態下都有一個良好的表現。
2.分表和分區不矛盾,能夠相互配合的,對於那些大訪問量,而且表數據比較多的表,咱們能夠採起分表和分區結合的方式(若是merge這種分表方式,不能和分區配合的話,能夠用其餘的分表試試),訪問量不大,可是表數據不少的表,咱們能夠採起分區的方式等。
3.分表技術是比較麻煩的,須要手動去建立子表,app服務端讀寫時候須要計算子表名。採用merge好一些,但也要建立子表和配置子表間的union關係。
4.表分區相對於分表,操做方便,不須要建立子表。
咱們知道對於大型的互聯網應用,數據庫單表的數據量可能達到千萬甚至上億級別,同時面臨這高併發的壓力。Master-Slave結構只能對數據庫的讀能力進行擴展,寫操做仍是集中在Master中,Master並不能無限制的掛接Slave庫,若是須要對數據庫的吞吐能力進行進一步的擴展,能夠考慮採用分庫分表的策略。
5.數據庫分表能夠解決單表海量數據的查詢性能問題,分庫能夠解決單臺數據庫的併發訪問壓力問題數據庫

分表的幾種方式:


一、mysql集羣

事實它並非分表,但起到了和分表相同的做用。集羣可分擔數據庫的操做次數,將任務分擔到多臺數據庫上。集羣能夠讀寫分離,減小讀寫壓力。從而提高數據庫性能。併發

二、自定義規則分表

1 Range(範圍)–這種模式容許將數據劃分不一樣範圍。例如能夠將一個表經過年份劃分紅若干個分區。
2 Hash(哈希)–這中模式容許經過對錶的一個或多個列的Hash Key進行計算,最後經過這個Hash碼不一樣數值對應的數據區域進行分區。例如能夠創建一個對錶主鍵進行分區的表。
3 Key(鍵值)-上面Hash模式的一種延伸,這裏的Hash Key是MySQL系統產生的。
4 List(預約義列表)–這種模式容許系統經過預約義的列表的值來對數據進行分割。
5 composite(複合模式) –以上模式的組合使用。app

三、利用merge存儲引擎來實現分表

CREATE TABLE IF NOT EXISTS `alluser` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(50) DEFAULT NULL,
    `sex` int(1) NOT NULL DEFAULT '0',
    INDEX(id)
) TYPE=MERGE UNION=(user1,user2) INSERT_METHOD=LAST AUTO_INCREMENT=1;

mysql>show engines;的時候你會發現mrg_myisam其實就是merge。高併發

相關文章
相關標籤/搜索