我将构建一个旨在被大量“查看”的页面,但很少有用户会“写入”数据库。例如,只有百分之一的用户可能会在我的网站上发布他的新闻,其余的只会阅读新闻。
在上面的例子中,当他们访问我的主页时会执行100个SAME QUERIES,而实际的数据库变化很小。实际上,其中 99 个查询都是对计算机能力的浪费。有没有什么方法可以缓存第一个查询的结果,并且当它们在短时间内检测到相同的查询时,可以传递缓存的结果?
我使用 MongoDB 和 Tornado。然而,有些帖子说MongoDB不做缓存。
使用 Nginx 之类的东西制作静态的缓存 HTML 并不是首选,因为我想每次都通过 Tornado 渲染个性化页面。
我使用 MongoDB 和 Tornado。然而,有些帖子说MongoDB不做缓存。
我不知道谁说的,但是 MongoDB 确实有办法缓存查询,事实上它使用操作系统的 LRU 来缓存,因为它本身不进行内存管理。
只要您的工作集适合 LRU,而操作系统无需将其分页或不断交换,您大多数时候就应该从内存中读取此查询。所以,是的,MongoDB 可以缓存,但从技术上讲它不能;操作系统确实如此。
实际上,其中 99 个查询都是对计算机能力的浪费。
大多数技术解决此类问题的缓存机制都是相同的,无论是使用 MongoDB 还是 SQL。当然,这只有在出现问题时才重要,如果你问我,你可能是在进行微优化;除非您获得 Facebook 或 Google 或 Youtube 类型的流量。
缓存主题涉及到一个庞大的主题,范围从在预聚合的 MongoDB/Memcache/Redis 等中缓存查询到缓存 HTML 和其他 Web 资源以在服务器端尽可能减少工作量。
正如我个人所说,您的情况听起来好像您对浪费计算机能力的看法是错误的。即使您要将此查询缓存在另一个集合/技术中,您也可能会使用与不打扰的情况相同的电量和资源来从该技术检索结果。然而,这个假设取决于您拥有正确的索引、模式、设置等。
我建议您阅读一些有关良好模式设计和索引创建的链接:
- http://docs.mongodb.org/manual/core/indexes/
- https://docs.mongodb.com/manual/core/data-model-operations/#large-number-of-collections
使用 Nginx 之类的东西制作静态的缓存 HTML 并不是首选,因为我想每次都通过 Tornado 渲染个性化页面。
是的,我认为通过尝试担心查询缓存,您正在过早地进行优化,特别是如果您不想起飞,每次服务器上的负载将达到 90%;加载页面本身。
我会专注于您的架构和索引,然后担心缓存(如果您确实需要的话)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)