会用数据库,找大厂工作是远远不够的。
本人2025美团暑期AI面试好几个MySQL场景问题不会答,已脏面评。遂在此整理学习!
文章目录
- 美团AI面
- 1.数据库分片sharding的概念,它有什么优势和挑战?
- 优势
- Sharding 挑战
- 2. 分库分表的常见策略有哪些
- a. 取模分片
- b. 范围分片
- c. 按业务
- d. 按时间分
- e. 混合分片
美团AI面
1.数据库分片sharding的概念,它有什么优势和挑战?
我当时甚至不清楚分片啥意思——其实就是分布式数据库,将数据拆分到多个数据库节点上。
每个数据库节点存储数据的一个子集,被称为分片(Shard)。
优势
-
水平扩展,能够支持海量数据
-
提高性能:
- 多个数据库节点可以并行处理查询和写入请求,减少单个数据库的负载。
- 每个分片只存储部分数据,索引体积更小,提高查询效率。
- 隔离
单个分片出现故障,不会影响其他分片的数据
Sharding 挑战
- 怎么分?
需要选择合适的分片键(Shard Key),否则:
数据倾斜:部分分片存储的数据量过大,导致查询压力集中,影响性能。
查询跨分片:如果查询涉及多个分片(如 JOIN、GROUP BY),可能导致性能下降。
- 维护
随着数据增长,可能需要重新分片。数据迁移过程复杂,可能影响在线业务。
需要额外的工具监控各个分片的健康状况,防止单点瓶颈。
- 跨分片问题
联合只能在应用层。
跨分片事务,需要引入两阶段提交(2PC)等机制。而且要保证数据一致性。
2. 分库分表的常见策略有哪些
延续上一个问题了,,
a. 取模分片
num % 3 == 0/1/2
✅ 数据均匀
❌ 拓展困难,模数想跳转只能重新计算。
范围查询表现不佳
b. 范围分片
每10W个编号分到一个数据库中
✅ 支持数据查询,扩展方便
❌ 数据倾斜风险:可能部分连续数据访问量大,分片压力大
c. 按业务
常规,不要宽列
d. 按时间分
日志,订单等
e. 混合分片
先分用户表,再对其取模分片,再按时间分