Bookmark 维护 API 文档
书签键保留排序字段顺序、BSON/RegExp 类型以及 let 内文档的字段顺序。预热、读取、精确列出与精确清理共用生效的 ObjectId 转换、limit 上限、游标策略及结果选项,包括 let 和 collation。已定义的顶层选项覆盖嵌套 options,生效值相同则身份相同。v4 键冷启动;旧条目按原 TTL 退出,或使用集合级书签清理移除。
概述
monSQLize 提供了三个 Bookmark 维护 API,用于管理 findPage 的 bookmark 缓存。这些 API 适用于运维调试和性能优化场景。
书签键与 findPage() 使用相同的数据源/认证/连接池缓存作用域及游标策略。预热、列出、清理与查询时,keyDims 中的 cursorTypes、cursorValueNormalizerVersion 应一致。实例默认配置生效;单次覆盖转换函数时必须提供自己的非空稳定版本。未配置版本的自定义函数会使 prewarmBookmarks() 抛出 INVALID_ARGUMENT;查询仍可执行,但不会自动复用书签。升级行为见缓存失效。
下方键字符串仅作概念示例,请使用返回的键/模式或书签 API,不要根据 getNamespace() 拼接缓存键。
核心特性
- ✅ 智能 Hash 匹配:自动应用
ensureStableSort规范化,确保与 findPage 使用相同的缓存键 - ✅ 精确控制:支持按
keyDims管理特定查询的 bookmark - ✅ 全局操作:不传
keyDims可操作所有 bookmark(适用于全局重置) - ✅ 失败检测:
prewarmBookmarks自动检测超出范围的页面 - ✅ 缓存可用性检查:所有 API 在缓存不可用时抛出
CACHE_UNAVAILABLE错误
使用场景
- 系统启动预热 - 预热热点页面,减少首次查询延迟
- 运维监控 - 查看已缓存的页面分布
- 数据变更后清除缓存 - 确保查询最新数据
- 内存管理 - 按需清理缓存释放资源
API 说明
1. prewarmBookmarks(keyDims, pages)
预热指定页面的 bookmark 缓存。
方法签名
参数
keyDims 对象:
返回值
使用示例
错误处理
2. listBookmarks(keyDims?)
列出已缓存的 bookmark(支持按查询过滤或查看全部)。
方法签名(2. listBookmarks(keyDims?))
参数(2. listBookmarks(keyDims?))
返回值(2. listBookmarks(keyDims?))
按查询过滤:
查看全部:
使用示例(2. listBookmarks(keyDims?))
运维监控场景
3. clearBookmarks(keyDims?)
清除指定查询或全部 bookmark 缓存。
方法签名(3. clearBookmarks(keyDims?))
参数(3. clearBookmarks(keyDims?))
返回值(3. clearBookmarks(keyDims?))
使用示例(3. clearBookmarks(keyDims?))
数据更新场景
完整工作流示例
场景 1: 系统启动预热
场景 2: 定期清理过期缓存
场景 3: 数据更新后刷新缓存
场景 4: 监控与统计
最佳实践
1. 预热策略
2. 清理时机
3. 监控与告警
注意事项
- 缓存键匹配:
keyDims的sort会自动应用ensureStableSort规范化,确保与 findPage 使用相同的缓存键 - 缓存可用性:所有 API 在缓存不可用时抛出
CACHE_UNAVAILABLE错误,使用前需确保缓存已配置 - 内存管理:预热过多页面会占用大量内存,建议只预热常用的前几页
- 失败页面:
prewarmBookmarks自动检测超出范围的页面,失败页面不会影响成功页面的预热 - 读路径使用:匹配的 bookmark 会被
findPage()页码导航读取,用于从最近的预热页继续跳转。 - 全局清理:
clearBookmarks()不传参数会清除集合的所有 bookmark,使用时需谨慎
错误处理(第2处)
参考资料
- findPage 方法文档
- 缓存策略文档
- bookmarks 示例代码
- 性能优化指南