数据库分表
水平分表
水平分表是将数据分别均匀的分配到多张表结构相同的表中,以减小单表的查询和读写压力。
数据分配策略
通过取模的方式将数据分配到不同的表。例如:一共3张表,id%3结果就是分配的表序号。
遇到的问题
- 跨表直接连接查询无法进行
- 我们需要统计数据的时候
- 如果数据持续增长,达到现有分表的瓶颈,需要增加分表,此时会出现数据重新排列的情况
解决方案
- 第1,2点可以通过增加汇总的冗余表,虽然数据量很大,但是可以用于后台统计或者查询时效性比较底的情况,而且我们可以提前算好某个时间点或者时间段的数据
- 第3点解决建议:
- 可以开始的时候,就分析大概的数据增长率,来大概确定未来某段时间内的数据总量,从而提前计算出未来某段时间内需要用到的分表的个数
- 考虑表分区,在逻辑上面还是一个表名,实际物理存储在不同的物理地址上
- 分库
- 倍数加表。比如:刚开始由单表变为2张表使用%2的方法,当2张表达到瓶颈的时候就再添加2张表,使用%4的方法让2张表的一般数据存入新添加的2张表。
垂直分表
垂直分表就是将表按照字段划分多个表。
拆分原则
- 把大字段独立存储到一张表中
- 把不常用的字段单独拿出来存储到一张表
- 把经常在一起使用的字段可以拿出来单独存储到一张表
拆分标准
- 表的体积大于2G并且行数大于1千万
- 表中包含有text,blob,varchar(1000)以上
- 数据有时效性的,可以单独拿出来归档处理
中包含有text,blob,varchar(1000)以上