我使用的是 Mongo 3.4 版,存储引擎是 WiredTiger。正如文档所说,Mongo 确实使用缓存来存储适合 RAM 的工作集。
所以我的问题是
- 有什么方法可以检查我的查询结果是否来自缓存?
- 如果我的工作集大于 RAM 怎么办?Mongo 会清除缓存,还是会驱逐一些数据?
- 任何关于学习 Mongo 缓存机制的好资源的建议
我使用的是 Mongo 3.4 版,存储引擎是 WiredTiger。正如文档所说,Mongo 确实使用缓存来存储适合 RAM 的工作集。
所以我的问题是
WiredTiger 缓存是保留供 WiredTiger 使用的内存的通用术语。该内存包含未压缩的集合数据、索引、“脏”内容(修改过的文档)等。
要回答您的问题:
有什么方法可以检查我的查询结果是否来自缓存?
任何查询都会导致 WiredTiger 以未压缩的形式将文档从磁盘加载到其内存部分(所谓的“缓存”)中。因此,所有查询回复都来自“缓存”。
如果我的工作集大于 RAM 怎么办?Mongo 会清除缓存,还是会驱逐一些数据?
它将根据需要从缓存中逐出数据。如果需要驱逐的数据是“脏的”,则还需要将其作为驱逐过程的一部分写入磁盘。
任何关于学习 Mongo 缓存机制的好资源的建议
MongoDB 文档中有一些关于它的一般描述:
如需更深入的文档,请参阅WiredTiger 文档。