示例:订单系统
1. 数据量分析
假设我们有以下数据:当前订单数1亿
每日新增100万
预估3年后的订单总量:1亿 +(365天X100万X3)≈11.95亿
2. 性能考量
假设单个Mysql实例能够高效处理的数据量上限是500GB。
每条订单记录大小约为1KB。
3. 业务需求
需支持按用户ID和订单时间查询。
需要保证单个用户的订单在同一分片,以便于事务处理和查询。
4. 分库分表策略
考虑以上因素,我们可以采用双层分片策略,先分库,再分表。
分库策略:使用用户ID作为分库键,确保同一用户的订单在同一库中。
分表策略:在每个库内,按照订单创建时间范围分表。
5.具体计算
-
预估总数据量: 11.95亿×1KB = 1.195 TB
-
预估需要库数量:1.195 TB / 500GB ≈ 2.39,向上取整到 4 个库(2的幂次,方便以后扩展)
-
每个库的表数量:假设我们单表控制在4000万条以内 每个库的记录数:11.95亿 / 4 ≈ 3亿 每个库需要的表数:3亿 / 4000万 = 7.5,向上取整 8 张表
6. 最终方案:
根据现有的场景:我们得出的分库分表方案是分4个库,8个表。一共32个分片。