数据库拆分
数据库拆分
拆分策略
随着业务发展,业务起步时候创建的单独一个库会逐渐不能满足
- 按照业务分库,比如用户库,订单库等
- Sharding,同样的库分多份,根据设定的key确定数据在那个库中
业务拆分
业务拆分对技术要求相对低,对业务/产品有较高的要求
步骤
- 确定业务如何分拆,比如订单按照不同类型的订单拆分,决定表的归属库
- 跟踪数据库语句,着重看关联表,找到会关联拆分到不同库的表的sql
- 关联SQL的处理方式
- 找到这些sql对应所在的代码,调整代码去掉关联
- 如果有必要,部分数据可以多库都有(一个库为Owner),数据从Owner库同步
- 拆分连接串,修改代码
- 测试环境按照新结构建库,导数据
- 测试修改后的代码(还需要继续跟踪SQL)
- 修改可能出现的bug
- 测试环境上线预演
- UAT环境预演(脱敏后的生产库)
- 生产上线
回滚方案需要准备好
Shading
Sharding对技术要求比较高
- 引入DAL (Lib/Service)
- 确定Sharding的Key
- DAL根据key确定落在那个数据库
- 业务代码基本不调整,只调整Data Access相关代码
- 测试环境测试,bug fix
- 测试环境上线预演
- UAT环境预演(脱敏后的生产库)
- 生产环境上线
回滚方案需要准备好
总结
如何拆分需要根据团队的具体情况选择合适的做法,无论哪种做法,都需要准备好回滚方案,避免在上线失败后恢复不回去。