MongoDB QPS 过高优化

一、MongoDB 数据库层优化 索引优化 ​关键字段索引:为高频查询字段(如 userId、transactionDate)创建单字段或组合索引,避免全集合扫描 // 示例:创建复合索引db.transactions.createIndex({ userId: 1, transactionDate: -1 }); ​索引监控:通过 db.collection.getIndexes() 检查冗余索引,删除未使用的索引以减少写入负载 ​分片扩展 ​水平分片:对集合按高频查询字段(如 userId)进行哈希或范围分片,将负载分散到多个节点 sh.shardCollection("myDatabase.transactions", { userId: "hashed" }); ​数据均衡:监控分片均衡性,避免数据倾斜导致部分节点过载 ​查询优化 ​聚合管道优化:将 $match 和 $project 尽量放在管道前端,通过索引快速过滤和减少字段,降低后续阶段处理的数据量。例如,先通过 $match 筛选出符合条件的文档,再执行排序或分组操作。 ​投影限制字段:仅返回必要字段,减少数据传输量 db.transactions.find({}, { userId: 1, amount: 1 }); ​硬件与配置 ​内存优化:增大 WiredTiger 缓存(如 --wiredTigerCacheSizeGB=8),提升热数据访问速度 ​SSD 存储:使用高性能 SSD 降低磁盘 I/O 延迟 二、Next.js 应用层优化 ​服务端渲染优化 ​静态生成(SSG)​:对数据更新频率低的页面(如商品详情页)使用 getStaticProps,构建时预生成 HTML,减少实时查询 ​按需增量更新(ISR)​:通过 revalidate 参数设置缓存刷新周期,平衡实时性与负载 ​异步化与批处理 ​批量查询:合并多个查询为单个聚合操作,减少网络往返次数 ​延迟加载:对非关键数据使用客户端渲染(CSR),通过 useEffect 或 SWR 异步加载 ​缓存机制 ​Redis 缓存层:将高频查询结果(如用户画像数据)缓存至 Redis,设置合理的 TTL ​HTTP 缓存头:通过 Cache-Control 头缓存 API 响应,减少重复查询 三、紧急应对措施 ​熔断降级 ​静态降级页面:当 QPS 超过阈值时,返回预生成的静态页面并提示“系统繁忙” ​接口限流返回缓存:对超频请求直接返回缓存数据,避免击穿数据库。 弹性扩缩容 ​Kubernetes 自动扩缩:根据 MongoDB 负载指标动态调整 Next.js 实例数量,避免雪崩效应 ​云数据库自动扩展:使用 MongoDB Atlas 或阿里云版,开启存储和计算资源自动扩

来源整理自:vue3js.cn 面试官系列