在 MongoDB 中缓存重复查询结果

2023-11-27

我将构建一个旨在被大量“查看”的页面,但很少有用户会“写入”数据库。例如,只有百分之一的用户可能会在我的网站上发布他的新闻,其余的只会阅读新闻。

在上面的例子中,当他们访问我的主页时会执行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(使用前将#替换为@)

在 MongoDB 中缓存重复查询结果 的相关文章

  • JedisPoolConfig 不可分配给 GenericObjectPoolConfig

    我有一个基于 Spring 的 Java Web 应用程序托管在 Heroku 上 我正在尝试使用 Redis 实现来利用 Spring 缓存抽象 当服务器启动时 我收到一条错误消息 Type redis clients jedis Jed
  • 查找聚合中的管道在 mongodb 中不起作用

    我是 mongodb 的新手 所以我希望这不会成为一个非常基本的问题 我做了一些研究 并试图应用我所发现的东西 但有些东西似乎让我忽略了 我有两个以下格式的集合 Shop shopId 1002 shopPosId 10002 descri
  • 在节点中使用mongoosejs更新多条记录

    我在使用 mongoosejs 和 Node js 更新多个记录时遇到问题 由于某种原因 即使有多个匹配 我也只更新一条记录 我还注意到回调在 update 之后不会触发 我没有收到任何错误消息 这里发生了什么 Page find stat
  • 猫鼬模式创建

    我刚刚开始使用猫鼬 我有一个使用 mongoose 的创建脚本 它使用示例数据创建模式和数据库 现在我编写实际的应用程序 我是否需要在每次应用程序运行时创建架构对象 或者它是否已经以某种方式可用 换句话说 我是否需要在每个使用 mongoo
  • 如何禁用通过 IIS 提供的单页应用程序 HTML 文件的缓存?

    我有一个通过 IIS 提供服务的单页面应用程序 Angular js 如何防止 HTML 文件缓存 该解决方案需要通过更改index html 或web config 中的内容来实现 因为无法通过管理控制台访问IIS 我目前正在研究的一些选
  • 如何检查Mongodb企业版是否正在使用

    如何查看是否使用的是mongodb企业版 有没有我可以查询的标志或属性 mongod version只返回版本 我最近在 MongoDB JIRA 上问了这个问题 回复如下 至少可以通过三种方法来确定您是否正在运行 Enterprise 我
  • 正则表达式 Spring 数据 mongodb 存储库

    早上好 我正在尝试使用查询注释将正则表达式与 Spring data mongodb 存储库结合起来 我想要的是在我的 mongo 文档的一个字符串属性中搜索一个子字符串 我一直在谷歌和这里寻找 但我没有找到任何优雅的东西 我想知道 Spr
  • Spring mongodb 指南针缺少创建的数据/集合

    我使用 spring 将数据保存到数据库 RepositoryRestResource collectionResourceRel operators path operators public interface OperatorsRep
  • Google Chrome 中不缓存动态加载的图像

    使用 jQuery 加载的图像未保存在 Google Chrome 的缓存中 每次都会从服务器下载 情况 我正在使用 jQuery slimbox2 在 灯箱 中加载图片 此时没有什么特别的 我添加了一些 jQuery 代码来检测鼠标光标何
  • Mongoose嵌入式文档更新

    我在嵌入式文档更新方面遇到问题 我定义的架构 var Talk new Schema title type String required true content type String required true date type D
  • 检索 mongoDB 文档中的空数组或 null

    我有我学校所有学生的收藏 每个文档都有一个sports列出每个学生从事的运动的数组属性 但该属性可能显示为sports or sports null或者根本不出现 如何检索属于上述三种情况之一的所有文件 如何向只有一项运动但未表示为数组的学
  • 如何更改 MongoDB 用户权限?

    例如 如果我有这个用户 gt db system users find user testAdmin pwd some hash roles clusterAdmin otherDBRoles TestDB readWrite 我想给那个用
  • Mongoose 模型 update() 与 save()

    有一个关于问题update vs save https stackoverflow com questions 39010045 mongoose update vs save 但它针对的是一些不同的东西 我猜 纯粹相关mongoose S
  • Java MongoDB 获取子文档的值

    我试图从子文档中获取键的值 但我似乎无法弄清楚如何使用 BasicDBObject get 函数 因为键嵌入了两层深度 这是文档的结构 File name file 1 report name report 1 group RnD 基本上一
  • 使用 Spring Data MongoDB 查询纯 BSON

    是否可以在 Spring Data MongoDB 中查询纯 JSON BSON 数据 而无需将数据转换为实际的模型实现 我能找到的只是 MongoOperation 的
  • 为 Meteor 数据创建编号列表

    有没有办法获取 Meteor 集合中项目的编号列表的 编号 我知道我可以在 html 中做到这一点 但我觉得如果我可以在 spacebars 中放置一些东西 那么样式会更容易 如果我可以使用更好的术语 请告诉我 像这样的东西 前 20 部电
  • 在apache中有条件地设置缓存头

    我想根据访问文件的路径有条件地设置缓存标头 基本上 访问http www example com cache cache key 应该为具有遥远未来缓存标头的文件提供服务 我使用重写规则来设置环境变量 然后尝试根据该变量设置缓存控制标头 然
  • Mongodump之后,调用MongoRestore挂起

    我们正在尝试在相对较小的数据库上做一个简单的 MongoDump 我们的步骤很简单 export 从目标机器上删除现有数据库 在目标机器上导入 MongoDump 完美执行 mongodump out root mongo prod DB
  • 获取对象数组中每个嵌套对象的虚拟属性?

    所以我知道如何获取单个虚拟属性 如 Mongoose 文档中所述 PersonSchema virtual name full get function return this name first this name last 但如果我的
  • 如何处理 MongoDB 的断开连接错误

    我在 Node js 进程中看到了这个未捕获的异常 Uncaught exception Error read ETIMEDOUT at TCP onStreamRead internal stream base commons js 16

随机推荐

  • 检查 ArrayList 中是否存在某个值

    如何检查某个值是否存在于ArrayList List
  • 按字典值将 NSDictionary 键排序到 NSArray 中

    我见过很多按键对字典进行排序 然后获取值的示例 但是我将如何按值排序 e g blue 12 red 50 white 44 我希望这些按数字降序排列为 red 50 white 44 blue 12 我尝试获取一个排序的 nsarray
  • Xcode9 警告项-90704,错误 ITMS-90022

    ERROR ITMS 90022 Missing required icon file The bundle does not contain an app icon for iPhone iPod Touch of exactly 120
  • iOS 6 shouldAutorotate:没有被调用

    我一直在互联网上寻找解决方案 但一无所获 我正在尝试使我的 iOS 5 应用程序兼容 iOS 6 我无法让方向的东西正常工作 我无法检测到轮换何时即将发生 这是我正在尝试的代码 BOOL shouldAutorotate return NO
  • 按其他数据帧列中不存在的值过滤数据帧[重复]

    这个问题在这里已经有答案了 用这个稍微敲一下我的头 我怀疑答案很简单 给定两个数据帧 我想过滤第一个数据帧 其中一列中的值不存在于另一个数据帧的列中 我想在不求助于成熟的 Spark SQL 的情况下执行此操作 因此只需使用 DataFra
  • 在将预测四舍五入到类别后,如何在 keras 中计算回归模型的准确性?

    如何在 keras 中创建和显示回归问题的准确度指标 例如在将预测四舍五入到最接近的整数类之后 虽然对于回归问题 准确度本身并没有按照惯例有效定义 但要确定ordinal数据的类 标签 适合将问题视为回归 但是 计算准确度指标也会很方便 无
  • GIT:推送到远程服务器时“git-upload-pack:找不到命令”

    所以我正在使用 GIT 尝试将代码推送到我的远程服务器 在共享的 UNIX 主机上 我不允许拥有自己的环境变量 SSH 帐户被阻止 并且没有 sudo 访问权限 成功在我的 home 中安装 git 尝试将代码推送到服务器返回 bash g
  • ncurses 到外壳并返回弄乱密钥

    我有这个 ncurses 应用程序正在执行标准配方 暂时退出 ncurses 运行外部 编辑器 shell 无论什么 然后在完成后返回 ncurses 这几乎可以工作 除了 ncurses 的前几个按键 之后得到的显然是假的 ncurses
  • Ruby 中的有限矩阵

    怎么来的Matrix类没有方法来编辑其向量和组件吗 似乎矩阵内的所有内容都可以读取但不能写入 我错了吗 有没有第三方优雅的Matrix 类似的类允许我删除行并有意编辑它们 如果没有这样的课程 请通知我 我将停止搜索 班级设计师Matrix一
  • 在将用户输入的 PHP 代码传递给 eval() 之前验证它

    在将字符串传递给 eval 之前 我想确保语法正确并允许 两个函数 a 和 b 四个运算符 括号 数字 1 2 1 1 我该如何做到这一点 也许它与 PHP Tokenizer 有关 我实际上正在尝试制作一个简单的公式解释器 因此 a 和
  • 瓦提尔。滚动到页面的某一点

    我正在尝试在网站上自动进行在线调查 但每次都会收到此错误 Selenium WebDriver Error UnknownError unknown error Element is not clickable at point 561 8
  • 如何使用maven部署带有依赖jar的Applet并对其进行签名?

    有人可以告诉我 pom 文件应该是什么样子来创建一个带有小程序的 jar 文件 该文件依赖于其他一些 jar 是否可以将一个 jar 作为小程序 以及如何对其进行签名 如果你想要你的课程and出现在的依赖项一个 jar 文件 你应该使用组装
  • Chrome 开发工具设置中没有“覆盖”页面

    如何在我的设置中启用覆盖面板 我打开 Chrome 浏览器 它就消失了 我浪费了大部分时间试图让它工作 但谷歌上有 0 个答案 谢谢 Chrome 让我的设置消失 酷 仿真 面板是新的 覆盖 面板
  • Gmail 上下文小工具

    我想问题一是 现在是否真的可以为 gmail 创建一个上下文小工具 在过去的两天里 我仔细阅读了 非常过时的 文档 以及我能找到的关于该主题的每个论坛帖子 我已经尝试了所有方法 但什么也没看到 甚至没有任何可能为我指明正确方向的错误消息提示
  • 绑定变量和替换变量(我使用 && 输入)之间有什么区别?

    这两个变量声明有什么区别 1 num number num 2 variable num1 number 因为在这两种情况下我都可以参考num通过使用 num or num在其他文件中也 对于绑定变量 num1 此外 我还有一个困惑 以下任
  • C# 数组从一行中拆分获取最后一项

    我知道这可以获取数组的第一项 string aString hello all this is a test string firstItemOfSplit aString Split new char 0 firstItemOfSplit
  • 如何使用 JPA 设置 Eclipselink?

    The Eclipselink 文档说我需要在 pom xml 中包含以下条目才能使用 Maven 获取它
  • 将带有多个分隔符的文本导入 pandas

    我有一些数据看起来像这样 c stuff c more header c begin data 1 1 5 1 2 6 5 1 3 5 3 我想将其导入到 3 列数据框中 其中列例如 a b c 1 1 0 5 etc 我一直在尝试将数据读
  • 私有函数 didFinishLaunchingWithOptions 没有被调用? (斯威夫特 3)

    Isn t didFinishLaunchingWithOptions应该在应用程序第一次开始运行时调用 我在此方法中设置了一个断点 当我在模拟器中运行应用程序时 断点不会被命中 这意味着该方法不会被调用 每当应用程序启动时 我都会尝试从
  • 在 MongoDB 中缓存重复查询结果

    我将构建一个旨在被大量 查看 的页面 但很少有用户会 写入 数据库 例如 只有百分之一的用户可能会在我的网站上发布他的新闻 其余的只会阅读新闻 在上面的例子中 当他们访问我的主页时会执行100个SAME QUERIES 而实际的数据库变化很