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