51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计用户系统的数据库架构,处理高并发注册、登录、查询等操作,用户量预计达到亿级。请考虑分库分表、读写分离、缓存策略,以及如何保证数据一致性(如用户信息更新后,其他服务能及时获取)。

Tencent软件开发-后台开发方向难度:中等

答案

1) 【一句话结论】针对亿级用户的高并发用户系统,需通过分库分表实现水平扩展,结合读写分离提升读性能,借助**缓存(如Redis)减少数据库压力,并采用最终一致性策略(如异步更新缓存、事件驱动)**保证数据一致性,注册用分布式事务,登录用缓存+数据库双写,查询走缓存+分库分表。

2) 【原理/概念讲解】
分库分表是将海量用户数据按规则(如按用户ID哈希、范围分片)拆分到多个数据库或表,解决单库容量与性能瓶颈。类比:把一个大仓库(单库)拆成多个小仓库(分库分表),每个小仓库放一部分商品(用户数据),这样整体容量和取货速度都提升。
读写分离是主库负责写(更新用户数据),从库负责读(查询用户信息),通过数据库复制(如MySQL主从)实现,类似工厂主生产线(主库)和副生产线(从库),主生产线生产后,副生产线同步,提升读吞吐量。
缓存策略(如Redis)是将热点数据(如用户信息、登录状态)存入内存,用户查询时先从缓存取,若缓存未命中,再从数据库取,然后更新缓存,减少数据库压力,类似超市货架(缓存)放热销商品,顾客先看货架,没货再去仓库(数据库)。

3) 【对比与适用场景】

概念定义特性使用场景注意点
分库分表水平/垂直拆分数据到多库多表水平扩展,解决单库容量/性能用户量超单库承载(如亿级),数据量巨大需设计分片规则,跨库事务复杂
读写分离主库写,从库读提升读性能,降低主库压力读多写少场景(如用户查询远多于注册),提升读吞吐从库数据延迟,需考虑一致性
缓存策略(Redis)内存数据库,存储热点数据低延迟,高并发读写热点数据查询(如用户信息、登录状态),减少数据库压力需缓存淘汰策略(LRU),避免内存溢出

4) 【示例】(以用户注册为例):

  • 用户输入手机号/邮箱注册,系统先校验唯一性(查Redis缓存,未命中则查数据库,缓存更新),然后按分库分表规则(用户ID哈希到分库,再按ID范围分表)写入用户表。写入后,同步更新Redis缓存(用户信息+登录状态),并触发消息队列(如Kafka)通知其他服务(如消息服务)。
  • 登录流程:用户输入凭证,先查Redis缓存(用户凭证+token),若命中则验证,否则查询数据库(用户表),验证后生成token,更新Redis缓存(token+用户信息),并写入数据库(token表)。查询用户信息时,先查Redis(用户信息),未命中则查分库分表数据库,然后更新Redis缓存(用户信息)。

5) 【面试口播版答案】(约90秒):
“针对亿级用户的高并发用户系统,核心是分库分表、读写分离、缓存结合,保证性能与一致性。首先,分库分表:按用户ID哈希分库,再按ID范围分表,水平扩展解决单库瓶颈。读写分离:主库写,从库读,提升读吞吐。缓存:用Redis存储用户信息、登录状态等热点数据,查询先缓存,减少数据库压力。数据一致性:注册用分布式事务(如两阶段提交),登录用缓存+数据库双写(写数据库后立即写缓存,失败回滚),查询走缓存+分库分表。这样既能应对高并发,又能保证数据最终一致。”

6) 【追问清单】

  • 问:分库分表的具体策略?比如水平分片还是垂直分片?
    答:水平分片(按ID哈希/范围),因为用户数据关联性弱,适合水平扩展。
  • 问:缓存一致性如何保证?比如用户信息更新后,其他服务如何及时获取?
    答:异步更新缓存(如消息队列),或同步双写(写数据库后立即写缓存,失败回滚),或最终一致性(允许短时间不一致,通过重试或补偿)。
  • 问:高并发下如何避免缓存雪崩?
    答:设置缓存过期时间随机,或使用分布式锁控制并发写入,或预加载热点数据。
  • 问:分库分表实现方式?比如ShardingSphere vs 自研?
    答:推荐ShardingSphere,成熟框架,支持多种分片策略,减少自研成本。
  • 问:跨库事务如何处理?比如用户信息更新后,关联表(如订单表)如何同步?
    答:用分布式事务(如Seata),或事件驱动(消息队列),或最终一致性(允许延迟同步)。

7) 【常见坑/雷区】

  • 分库分表导致跨库事务复杂:单库事务无法跨库,需用分布式事务(如Seata),否则数据不一致。
  • 缓存穿透:空值查询导致数据库压力,需布隆过滤器或缓存空值。
  • 缓存雪崩:大量缓存过期同时失效,导致数据库雪崩,需设置过期时间随机或预加载。
  • 分库分表规则不合理:如按ID范围分表,导致热点数据集中,性能下降,需按哈希或轮询分片。
  • 读写分离延迟:从库数据延迟,导致查询数据不一致,需考虑延迟时间,或限制读操作对数据一致性要求不高的场景。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1