最近在学习分库分表的方案,整理一下理解。
为什么需要分库分表
当一个表的数据量超过千万级别时,单库的性能会遇到瓶颈。虽然索引能帮助查询,但 B+Tree 层级变深,buffer pool 也装不下那么多数据。
分片键怎么选
这是最关键的一步。常见的选择: - 用户 ID:同一用户的数据在同一分片,用户维度查询快 - 订单 ID:按订单号分散,但用户查自己所有订单时需要跨分片 - 时间:按月份或年份分,适合日志类数据
常见方案
用 ShardingSphere 或者自己实现路由逻辑:
- 先规划好分几个库、每个库几张表
- 确定分片算法(取模、哈希、范围)
- 数据迁移时做双写 + 灰度切换
- 尽量避免跨分片查询,如果需要可以用 ES 做索引
分库分表不是银弹,能不分就不分。但随着数据增长,迟早要面对。
评论
评论已关闭。