mongoose - 是否有用于数据访问的 Mongoose 事件?
问题描述
我正在我的应用程序中做一些测试,看看内存缓存是否真的在工作。但是,由于内存缓存显然没有公开“命中”事件,我无法判断是否真的从缓存中获取数据。因此,我尝试查看当应用程序实际从数据库中获取一些数据时是否会触发 mongoose 事件,但似乎又没有。我想知道是否有这样的活动?如果是这样,它是哪一个?我尝试使用这段代码。
mongoose.on("open", () => {
console.log("Open DB conn");
});
但是仅在我最初连接到数据库时才在应用程序启动时触发。
解决方案
mongoose 中没有用于评估或审核内存缓存的事件。您所指的事件与连接本身有关。connecting
、connected
、open
和等项目close
是此类事件的示例。您可以在文档中查看完整的连接事件列表。
根据您是否指定了单独的存储引擎,mongodb 的默认值为WiredTiger。
要确定您是否正在从 WiredTiger 访问缓存内存,您可以参考此堆栈帖子的选定答案,其中指出:
任何查询都会导致 WiredTiger 以未压缩的形式将文档从磁盘加载到其内存部分(所谓的“缓存”)中。因此,所有查询回复都来自“缓存”。
至于审核是否使用缓存内存的方法或功能,我无法立即想到。您可以弄清楚的一种方法是确定启用缓存与禁用/清除缓存时查询需要多长时间。删除缓存查询的一种方法是使用db.collection.getPlanCache().clear()
.
如果启用缓存后查询时间更快,那么您就知道缓存正在工作。
推荐阅读
- php - 如何避免 fputcsv 中不必要的双引号 (")?
- django - Django 通过 is_active 和 has_usable_password() 方法过滤用户
- ios - .reloadSections 后的 UITableView 偏移量不正确
- swift - 选择 UICollectionViewCell 并执行 segue
- python - 获取 tkinter 标签以不与网格中的其他标签交互
- spring - Junit测试:org.springframework.http.InvalidMediaTypeException:无效的mime类型
- sql - 使用标识列更新表的主索引
- excel-formula - Excel 循环公式和 if 语句
- java - 如何使用安装程序创建 exec 并自动运行文件
- android - 使用 MDX ToolKit 包装 apk - 无法合并来自 ManagedApp 的资源