关于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节点和数据节点进行配置管理。

猜你喜欢

转载自www.cnblogs.com/huqi21st/p/9395139.html