为什么要分库分表?,意义在于它高并发或者数据量大的时候。
* 分表和分库
分表就是单表的数据量太大,一般要控制每个表就在200万的记录条数,如果大于的话会影响sql的执行性能。
分库就是一般而言,数据库的并发最多的2000,如果超过就要扩容了,当然一个健康的数据库最好保持并发在1000左右,不要太大。
* 分表分库技术
最常用的分库分表的技术有Sharding-jdbc和mycat。Sharding-jdbc的话是在client层面的,当然也有proxy层面的方案。然后Mycat的话是在Proxy层面。
* 水平拆分和垂直拆分
水平拆分就是把一个表的数据弄得多个表中去,但是每个库的表结构是一样的,只不过每个库的数据是不同的,它加起来就是全部的数据。
垂直拆分就是把一个很多字段的表拆分成多个表,然后或多个数据库中去,每个数据库的结构不一样。那么这样子的话,可以将较少的访问频率很高的字段放在一个表中去,然后叫多访问频率很低的字段放在另一个表中去,可以利用数据库缓存。
* 中间件在分库分表中的作用
它根据你的某个字段的值,比如说一个用户ID,他会根据这个值自动路由的你对应的库上去,然后再自动路由到对应的表中去。
* 分库分表的两种方式
一种是按范围的区分,就是一段连续的数据,比如说一段时间范围,但是这个容易产生热点问题,因为流量都达到最新的数据库上去了。
还有一种的话叫hash。通过还是分发呢,那么每个数据库的请求并发大概是平均的,但是扩容麻烦,因为如果数据库迁移的话,hash那要重新计算,数据再分配到不同的数据库和表。