關於mysql的分區,分表,集群
首先說一下,之前一直混淆分區和分表的概念 這裏總結一下
一.什麽是分區
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的分區,分表,集群