MK *_*ung 9 caching tornado mongodb
我将构建一个旨在"查看"很多的页面,但更少的用户将"写入"数据库.例如,100个用户中只有1个可以在我的网站上发布他的新闻,其余的只会阅读新闻.
在上述情况下,当他们访问我的主页时,将执行100个相同的查询,而实际的数据库更改很少.实际上,其中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资源,以在服务器端尽可能少地工作.
正如我所说的那样,你的情景听起来好像是在思考浪费的计算机能力.即使您要将此查询缓存在另一个集合/技术中,您也可能会使用相同数量的功率和资源来检索该技术的结果,而不是您只是不打扰.然而,这个假设归结为你有正确的索引,架构,设置等.
我建议您阅读有关良好架构设计和索引创建的一些链接:
使用像Nginx这样的静态缓存HTML不是首选,因为我想每次都通过Tornado呈现个性化页面.
是的,我认为通过尝试担心查询缓存,您已经过早优化,特别是如果您不想起飞,每次服务器上90%的负载是多少; 加载页面本身.
我将专注于您的架构和索引,然后担心如果您真的需要缓存.
Motor (MOngo + TORnado) 包的作者在这里给出了一个缓存类别列表的示例:http ://emptysquare.net/blog/refactoring-tornado-code-with-gen-engine/
基本上,他定义了一个全局类别列表并查询数据库来填充它;然后,每当他需要页面中的类别时,他都会检查列表:如果存在,则使用它,如果不存在,则再次查询并填写它。他将其设置为每当插入数据库时使列表无效,但根据您的使用情况,您可以创建一个全局超时变量来跟踪下一步何时需要重新查询。如果你正在做一些复杂的事情,这可能会失控,但如果它只是最新帖子或其他内容的列表,我认为那就没问题了。
| 归档时间: |
|
| 查看次数: |
13187 次 |
| 最近记录: |