数据库分表

水平分表

  水平分表是将数据分别均匀的分配到多张表结构相同的表中,以减小单表的查询和读写压力。

数据分配策略

  通过取模的方式将数据分配到不同的表。例如:一共3张表,id%3结果就是分配的表序号。

遇到的问题

  1. 跨表直接连接查询无法进行
  2. 我们需要统计数据的时候
  3. 如果数据持续增长,达到现有分表的瓶颈,需要增加分表,此时会出现数据重新排列的情况

解决方案

  1. 第1,2点可以通过增加汇总的冗余表,虽然数据量很大,但是可以用于后台统计或者查询时效性比较底的情况,而且我们可以提前算好某个时间点或者时间段的数据
  2. 第3点解决建议:
    1. 可以开始的时候,就分析大概的数据增长率,来大概确定未来某段时间内的数据总量,从而提前计算出未来某段时间内需要用到的分表的个数
    2. 考虑表分区,在逻辑上面还是一个表名,实际物理存储在不同的物理地址上
    3. 分库
    4. 倍数加表。比如:刚开始由单表变为2张表使用%2的方法,当2张表达到瓶颈的时候就再添加2张表,使用%4的方法让2张表的一般数据存入新添加的2张表。

 

垂直分表

  垂直分表就是将表按照字段划分多个表。

拆分原则

  • 大字段独立存储到一张表中
  • 不常用的字段单独拿出来存储到一张表
  • 经常在一起使用的字段可以拿出来单独存储到一张表

拆分标准

  • 表的体积大于2G并且行数大于1千万
  • 中包含有textblobvarchar(1000)以上
  • 据有时效性的,可以单独拿出来归档处理

中包含有textblobvarchar(1000)以上

posted @ 2017-12-23 21:00  huanStephen  阅读(433)  评论(0编辑  收藏  举报