PuGong

Bookworm, Programmer

数据库拆分

15 Dec 2016

数据库拆分

拆分策略

随着业务发展,业务起步时候创建的单独一个库会逐渐不能满足

  • 按照业务分库,比如用户库,订单库等
  • Sharding,同样的库分多份,根据设定的key确定数据在那个库中

业务拆分

业务拆分对技术要求相对低,对业务/产品有较高的要求

步骤

  • 确定业务如何分拆,比如订单按照不同类型的订单拆分,决定表的归属库
  • 跟踪数据库语句,着重看关联表,找到会关联拆分到不同库的表的sql
  • 关联SQL的处理方式
    • 找到这些sql对应所在的代码,调整代码去掉关联
    • 如果有必要,部分数据可以多库都有(一个库为Owner),数据从Owner库同步
  • 拆分连接串,修改代码
  • 测试环境按照新结构建库,导数据
  • 测试修改后的代码(还需要继续跟踪SQL)
  • 修改可能出现的bug
  • 测试环境上线预演
  • UAT环境预演(脱敏后的生产库)
  • 生产上线

回滚方案需要准备好

Shading

Sharding对技术要求比较高

  • 引入DAL (Lib/Service)
  • 确定Sharding的Key
  • DAL根据key确定落在那个数据库
  • 业务代码基本不调整,只调整Data Access相关代码
  • 测试环境测试,bug fix
  • 测试环境上线预演
  • UAT环境预演(脱敏后的生产库)
  • 生产环境上线

回滚方案需要准备好

总结

如何拆分需要根据团队的具体情况选择合适的做法,无论哪种做法,都需要准备好回滚方案,避免在上线失败后恢复不回去。