一、拆分数据库

1.1 垂直切分

垂直切分是根据业务来拆分数据库,同一类业务的数据表拆分到一个独立的数据库,另一类的数据表拆分到其他数据库。
image.png
垂直切分可以降低单节点数据库的负载,但无法起到缩表的作用,MySQL单表记录超过2000万,读写性能会下降的很快。

1.2 水平切分

水平切分是按照某个字段的某种规则,把数据切分到多张数据表。一张数据表化整为零,拆分成多张数据表,这样就可以起到缩表的效果了。
image.png

  1. 水平切分出来的数据表并非一定要分布在多节点,MySQL自带数据分区的技术,可以把一张表的数据切分存储在不同的目录(硬盘)下,提高I/O性能。
  2. 水平切分的另一个缺点就是扩容比较麻烦,日积月累,分片迟早有不够用的时候。这时候不是首先选择增加新的集群分片。而是做冷热数据分离,定期对分片中的数据归档。(MyCat+TokuDB)
    image.png

1.3 方案

先做水平切分,后作垂直切分

  1. 随着数据量的增加,最先应该做的是数据分片,利用多块硬盘来增大数据IO能力和存储空间,这么做的成本是最低的。几块硬盘的钱就能收获不错的IO性能。
  2. 随着数据量继续增大,这时候应该把数据切分到多个MySQL节点上,用MyCat管理数据切分。当然还要做数据的读写分离等等。理论上,使用了冷热数据分离之后,水平切分这种方式可以继续维持很长一段时间,数据量再大也不怕,定期归档就好了。
  3. 数据库到了水平切分的阶段,数据量的增加已经不是更改架构设计的主要原因了。反而这个阶段业务系统承受不住了所以按照模块和业务,把一个系统拆分成若干子系统。若干子系统之间,数据相对独立————垂直切分。

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议