Count 队列控制
版本: v1.0.0+
用途: 控制高并发场景下的 countDocuments 并发数量,避免压垮数据库
📖 目录
概述
Count 队列控制是 monSQLize 的高级特性,用于限制同时执行的 countDocuments 操作数量。
核心功能
- ✅ 并发控制 - 限制同时执行的 count 数量
- ✅ 队列管理 - 超出限制的请求自动排队
- ✅ 超时保护 - 防止请求长时间等待
- ✅ 统计监控 - 提供队列状态和性能指标
- ✅ 自动启用 - 默认开启,无需配置
为什么需要队列控制
问题场景
解决方案
快速开始
默认配置(推荐)
默认配置:
- ✅
enabled: true- 默认启用 - ✅
concurrency:CPU 核心数(最少 4,最多 16) - ✅
maxQueueSize: 10000- 队列最大容量 - ✅
timeout: 60000- 超时 1 分钟
配置选项
基本配置
配置说明
enabled
- 类型:
Boolean - 默认值:
true - 说明: 是否启用队列控制
concurrency
- 类型:
Number - 默认值: CPU 核心数(4-16)
- 说明: 同时执行的最大 count 数量
推荐值:
- 小型应用(单实例): 4-8
- 中型应用(多实例): 8-12
- 大型应用(高并发): 12-16
maxQueueSize
- 类型:
Number - 默认值:
10000 - 说明: 队列最大容量,超出后拒绝新请求
timeout
- 类型:
Number(毫秒) - 默认值:
60000(1 分钟) - 说明: 请求超时时间
使用场景
场景 1: 高并发分页
场景 2: 批量查询
场景 3: 定时统计任务
性能对比
测试场景
- 数据量: 100 万条记录
- 并发请求: 100 个
- 服务器: 8 核 CPU
结果对比
结论: concurrency: 8 是最佳平衡点
最佳实践
1. 根据服务器配置调整并发数
2. 配合缓存使用
3. 配合分布式锁(多实例场景)
4. 监控队列状态
5. 使用 approx 模式(快速但近似)
故障排查
问题 1: 队列拒绝请求
错误: Count queue is full (10000)
原因: 队列已满,新请求被拒绝
解决:
问题 2: 请求超时
错误: Count execution timeout (60000ms)
原因: count 执行时间超过超时限制
解决:
问题 3: 数据库压力仍然很大
原因: 并发数设置过高
解决:
API 参考
配置对象
统计信息
相关文档
- findPage API
- 缓存配置
- 分布式部署
- 性能优化
最后更新: 2025-01-02