首页 > 解决方案 > 是否有用于数据访问的 Mongoose 事件?

问题描述

我正在我的应用程序中做一些测试,看看内存缓存是否真的在工作。但是,由于内存缓存显然没有公开“命中”事件,我无法判断是否真的从缓存中获取数据。因此,我尝试查看当应用程序实际从数据库中获取一些数据时是否会触发 mongoose 事件,但似乎又没有。我想知道是否有这样的活动?如果是这样,它是哪一个?我尝试使用这段代码。

mongoose.on("open", () => {
  console.log("Open DB conn");
});

但是仅在我最初连接到数据库时才在应用程序启动时触发。

标签: mongoose

解决方案


mongoose 中没有用于评估或审核内存缓存的事件。您所指的事件与连接本身有关。connectingconnectedopen和等项目close是此类事件的示例。您可以在文档中查看完整的连接事件列表。

根据您是否指定了单独的存储引擎,mongodb 的默认值为WiredTiger

要确定您是否正在从 WiredTiger 访问缓存内存,您可以参考堆栈帖子的选定答案,其中指出:

任何查询都会导致 WiredTiger 以未压缩的形式将文档从磁盘加载到其内存部分(所谓的“缓存”)中。因此,所有查询回复都来自“缓存”。

至于审核是否使用缓存内存的方法或功能,我无法立即想到。您可以弄清楚的一种方法是确定启用缓存与禁用/清除缓存时查询需要多长时间。删除缓存查询的一种方法是使用db.collection.getPlanCache().clear().

如果启用缓存后查询时间更快,那么您就知道缓存正在工作。


推荐阅读