数据库分表( 二 )


文章插图
 
例如:电话账单就可以分成多个表:最近3个月的账单数据存在一个表 , 3个月前的历史账单存放到另一种表 , 超过一年的历史账单可以存储到单独的存储介质上 , 这种拆分是最常用的水平拆分方法 。
水平分割标准水平分割最重要的是找到分割的标准 , 不同的表应根据业务找出不同的标准

  • 用户表可以根据用户的手机号段进行分割如user183、user150、user153、user189等 , 每个号段就是一张表
  • 用户表也可以根据用户的id进行分割 , 加入分3张表user0,user1,user2 , 如果用户的id%3=0就查询user0表 , 如果用户的id%3=1就查询user1表
  • 对于订单表可以按照订单的时间进行分表
三 数据库分片方案
  • 客户端代理: 分片逻辑在应用端 , 封装在jar包中 , 通过修改或者封装JDBC层来实现 。当当网的 Sharding-JDBC 、阿里的TDDL是两种比较常用的实现 。
  • 中间件代理: 在应用和数据中间加了一个代理层 。分片逻辑统一维护在中间件服务中 。我们现在谈的 Mycat、360的Atlas、网易的DDB等等都是这种架构的实现 。
四:中间表查询:大表统计创建一个中间表 , 中间表的结构和原始表结构一样 , 或多字段 , 将原始表中的部分数据转移到中间表 , 然后对中间表进行统计 。中间表复制源表部分数据 , 并且与源表相隔离 , 在中间表上做统计查询不会对在线应用产生负面影响 中间表上可以灵活的添加索引增加临时用的新字段 , 从而达到提高统计查询效率和辅助统计查询作用 。

【数据库分表】


推荐阅读