一、为什么要分库分表
分表
单表到达几千万数据的时候,会极大影响sql执行的性能,将一个表的数据放到多个表中,这样可以控制每个表的数据量在可控范围内。
分库
一个库按经验而言,最多支撑到并发2000,一定要扩容,而且一个健康的单库并发值最好保持在每秒1000左右,不要太大。
总结
分表能够解决数据量过大带来的查询效率下降的问题;分库可以解决面对高并发的读写访问压力的问题。
二、如何对数据库进行垂直拆分或水平拆分的?
水平拆分
把一个表的给弄到多个表里去,每个库的表结构都一样,只不过每个库表放的数据不同。
垂直拆分
将一个有很多字段的表拆分成多个表或多个库上去。每个库表的结构都不一样,每个库表都包含部分字段。一般来说,会将访问频率很高的字段放到一个表去(这种列的数量比较少),将较低访问频率放到另一个表里去(这种列的数量比较多)。
分库分表的方式
1.按照range来分
每个库一段连续的数据,比如按时间范围来分。
2.按照hash来分
某个字段hash一下均匀分散,这个比较常用。hash分发,可以平均分配每个库的数据量和请求压力。坏处在于扩容起来比较麻烦,数据迁移后,之前的数据都需要重新计算hash值重新分配到不同的表或库。