1. 程式人生 > >關於mysql的分區,分表,集群

關於mysql的分區,分表,集群

redis query 無法 數據 節點數 isam 這樣的 故障 brush

首先說一下,之前一直混淆分區和分表的概念 這裏總結一下

一.什麽是分區

mysql數據庫中的數據是以文件的形勢存在磁盤上的,一張表主要對應著三個文件,一個是frm存放表結構的,一個是myd存放表數據的,一個是myi存表索引的。

分區的二種方式

1,橫向分區

什麽是橫向分區呢?就是橫著來分區了,舉例來說明一下,假如有100W條數據,分成十份,前10W條數據放到第一個分區,第二個10W條數據放到第二個分區,依此類推。也就是把表分成了十分,根用merge來分表,有點像哦。取出一條數據的時候,這條數據包含了表結構中的所有字段,也就是說橫向分區,並沒有改變表的結構。

2,縱向分區

什麽是縱向分區呢?就是豎來分區了,舉例來說明,在設計用戶表的時候,開始的時候沒有考慮好,而把個人的所有信息都放到了一張表裏面去,這樣這個表裏面就會有比較大的字段,如個人簡介,而這些簡介呢,也許不會有好多人去看,所以等到有人要看的時候,在去查找,分表的時候,可以把這樣的大字段,分開來。

感覺數據庫的分區好像是切蘋果,到底是橫著切呢,還是豎著切,根據個人喜好了,mysql提供的分區屬於第一種,橫向分區,並且細分成很多種方式:range分區,list分區,hash分區,key分區,子分區

二.分區管理示例:

1,刪除分區

mysql> alter table user drop partition p4;  
mysql> alter table user drop partition p4;
2,新增分區

查看復制打印?
//range添加新分區  
mysql> alter table user add partition(partition p4 values less than MAXVALUE);  
Query OK, 0 rows affected (0.06 sec)  
Records: 0  Duplicates: 0  Warnings: 0  
  
//list添加新分區  
mysql> alter table list_part add partition(partition p4 values in (25,26,28));  
Query OK, 0 rows affected (0.01 sec)  
Records: 0  Duplicates: 0  Warnings: 0  
  
//hash重新分區  
mysql> alter table hash_part add partition partitions 4;  
Query OK, 0 rows affected (0.12 sec)  
Records: 0  Duplicates: 0  Warnings: 0  

  

三,分區優點

1,分區可以分在多個磁盤,存儲更大一點

2,根據查找條件,也就是where後面的條件,查找只查找相應的分區不用全部查找了

3,進行大數據搜索時可以進行並行處理。

4,跨多個磁盤來分散數據查詢,來獲得更大的查詢吞吐量

分區與分表之間的區別:

    分區從邏輯上來講只有一張表,而分表則是將一張表分解成多張表。分表和分區不矛盾,可以相互配合使用。

四,分表

其實分表也分為水平分表和邏輯分表,分表和分區的區別就在與分區是由數據庫完成,在代碼角度去看還是一張表,分表其實是由代碼控制的一種邏輯分表。自己制定一些分表規則,如取模

實現舉例:

水平分表

insert into tb_member1(id,name,sex) select id,name,sex from member where id%2=0;

insert into tb_member2(id,name,sex) select id,name,sex from member where id%2=1;
垂直分表: 舉例說明,在一個博客系統中,文章標題,作者,分類,創建時間等,是變化頻率慢,查詢次數多,而且最好有很好的實時性的數據,我們把它叫做冷數據。
 而博客的瀏覽量,回復數等,類似的統計信息,或者別的變化頻率比較高的數據,我們把它叫做活躍數據。
我們進行縱向分表後:
   1,存儲引擎的使用不同,冷數據使用MyIsam 可以有更好的查詢數據。活躍數據,可以使用Innodb ,可以有更好的更新速度。
   2,對冷數據進行更多的從庫配置,因為更多的操作是查詢,這樣來加快查詢速度。對熱數據,可以相對有更多的主庫的橫向分表處理。
   3,對於一些特殊的活躍數據,也可以考慮使用memcache ,redis之類的緩存,等累計到一定量再去更新數據庫.

五,集群

集群還不是很理解,這裏簡單記錄下網友總結

一 mysql集群和節點
集群是一組節點的組合。
節點類型:管理節點,sql節點,數據節點。
管理節點:用來管理其他的節點,只能有一個。
SQL節點:是應用程序和數據節點的橋梁,用來存儲表結構。SQL節點數量越多,單個SQL節點的負載越小,系統性能越好。
數據節點:用來存儲數據,存儲引擎只能是NDB,否則無法存儲數據。每個數據節點都可以配置多個鏡像,當單個數據節點出故障的時候,只要鏡像正常,不影響集群的正常使用。
應用程序訪問SQL節點,SQL節點訪問數據節點,數據節點返回結果給SQL節點,SQL節點返回給應用程序。管理節點不參與該過程,只對SQL節點和數據節點進行配置管理。

關於mysql的分區,分表,集群