吃惊!!!原来还可以这样预估分库分表

10 阅读1分钟

示例:订单系统

1. 数据量分析

假设我们有以下数据:当前订单数1亿

每日新增100万

预估3年后的订单总量:1亿 +(365天X100万X3)≈11.95亿

 

2. 性能考量

假设单个Mysql实例能够高效处理的数据量上限是500GB。

每条订单记录大小约为1KB。

 

3. 业务需求

需支持按用户ID和订单时间查询。

需要保证单个用户的订单在同一分片,以便于事务处理和查询。

 

4. 分库分表策略

考虑以上因素,我们可以采用双层分片策略,先分库,再分表。

分库策略:使用用户ID作为分库键,确保同一用户的订单在同一库中。

分表策略:在每个库内,按照订单创建时间范围分表。

 

5.具体计算

  1. 预估总数据量: 11.95亿×1KB = 1.195 TB

  2. 预估需要库数量:1.195 TB / 500GB ≈ 2.39,向上取整到 4 个库(2的幂次,方便以后扩展)  

  3. 每个库的表数量:假设我们单表控制在4000万条以内 每个库的记录数:11.95亿 / 4 ≈ 3亿 每个库需要的表数:3亿 / 4000万 = 7.5,向上取整 8 张表

 

6. 最终方案:

根据现有的场景:我们得出的分库分表方案是分4个库,8个表。一共32个分片。