我使用 MongoDB 和 Tornado。但是,有些帖子说 MongoDB 不做缓存。
我不知道是谁这么说的,但 MongoDB 确实有缓存查询的方法,实际上它使用操作系统的 LRU 来缓存,因为它本身不进行内存管理。
只要您的工作集适合 LRU,而操作系统不必不断地对其进行分页或交换,您就应该在大多数情况下从内存中读取此查询。所以,是的,MongoDB 可以缓存,但从技术上讲它不能;操作系统可以。
实际上,其中 99 个查询是对计算机能力的浪费。
解决此类问题的缓存机制在大多数技术中都是相同的,无论是 MongoDB 还是 SQL。当然,这只在有问题的情况下才重要,如果你问我,你可能是在微优化;除非您获得 Facebook 或 Google 或 Youtube 类型的流量。
缓存主题涉及一个巨大的主题,范围从在预先聚合的 MongoDB/Memcache/Redis 等中缓存查询到缓存 HTML 和其他 Web 资源以在服务器端尽可能少地工作。
正如我个人所说,您的情况听起来好像您对浪费的计算机能力的想法是错误的。即使您将此查询缓存在另一个集合/技术中,您也可能会使用与您不打扰的情况相同数量的功率和资源从该技术中检索结果。但是,这种假设归结为您拥有正确的索引、架构、设置等。
我建议您阅读一些有关良好架构设计和索引创建的链接:
使用 Nginx 之类的东西制作静态、缓存的 HTML 不是首选,因为我想每次都通过 Tornado 呈现个性化页面。
是的,我认为通过尝试担心查询缓存,您过早地进行了优化,特别是如果您不想起飞,那么每次服务器上 90% 的负载是多少;加载页面本身。
我会专注于您的架构和索引,然后在您真的需要时担心缓存。