{{ it.name }}
{{ it.text }}
Mysql分区是指按照一定的规则将一个大表分解成几个较小的部分。这里的规则一般是使用分区规则对表进行水平分区;没有逻辑上的变化,但实际上表已经被分成了几个物理对象,每个物理对象又被分成了一个独立的对象。与没有分区的表相比,分区表有很多优点,包括并发统计查询、快速归档和删除分区数据、分布式存储和更好的查询性能。
mysql垂直分区和水平分区
数据库扩展大概分为以下几个步骤:
1、读写分离:当数据库访问量还不是很大的时候,我们可以适当增加服务器,数据库主从复制的方式将读写分离;
2、垂直分区:一旦写操作增加,那么主从数据库将花费更多时间在数据同步上,此时服务器也承受不起;然后对于数据的垂直分区来说,数据的垂直分区思想是将写操作较为频繁的数据表,比如用户表_ user,或订单表_ orders,分离出这两个表,放在不同的服务器上,如果这两个表之间存在联表查询,那么只能将原始 sql语句分开,先查询一个表,再查询另一个表,虽然说这样做会消耗更多的性能,但是相对于这样的大量数据同步,负担还是减轻了很多;
3、水平分区:但是事情往往不尽如人意,垂直分区可能会用一段时间。因为网站太热,每天访问量100w,突然跳到1000 W,这个时候数据可以分开,我们可以根据用户的Id来分配。比如%2或者%10的形式,这种形式对以后的扩展有很大的限制。当我从10个分区增加到20个时,以下提供几种常见的算法:
Hash算法:就是采用user_id%的方式;
范围:可以根据user_id字符值范围分区,如1-1000为一区,1001-2000则是另一个区等;
映射关系:就是将user_id存在的所对应的分区放在数据库中保存,当用户操作时先去查询所在分区,再进行操作;
对于以上几种扩展方式,读写分离主要是操作上的扩展,垂直分区主要是对写入较频繁数据表的分离,水平分区主要是数据分离;