$inc 修饰符如何处理 mongodb 中的并发请求?

2023-12-06

The $inc修饰符可用于增加字段(例如分析计数器、页面浏览量等)。

如果有并发请求,它如何工作?

假设我有文件:

{ "views" : 1 }

如果有两个并发请求使用时会发生什么$inc?观看次数是 2 还是 3?


这确实有点宽泛,但我可以提供大致的思路。截至 MongoDB 使用集合级锁定使用默认存储引擎。还有可用的 WiredTiger 存储引擎,它实现了文档级锁定。但基本上在所有版本中,每个请求都会发生某种程度的“锁定”。根据您的实际吞吐量需求,级别越细越好。

本质上,没有两个请求实际上同时发生,因为它们会“阻塞”所发出的锁,直到它被释放。所以将返回的值(比如说findAndModify()request ),将是发出该请求时的“当前状态”。

因此,对于这样的请求,首先执行的语句将返回值 2,下一个执行的语句将返回值 3。数据库中的结束位置是该值目前为 3。

因此,某些东西不可能同时“修改”,最终状态将是在发出“所有”请求之后发生的状态。所以$inc其他操作员完全按照他们应该做的那样,根据文档实际能够访问时的状态修改内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

$inc 修饰符如何处理 mongodb 中的并发请求? 的相关文章

  • mongodb-org 与 mongodb-10gen-server 冲突

    我在 CentOS 上使用 yum 安装 Mongo 时遇到问题 我已经关注了这些说明 http docs mongodb org manual tutorial install mongodb on red hat centos or f
  • $near 需要 geojson 点,给定 geojson 点

    我有包含如下所示的地理字段的文档 geo type Point coordinates 37 44609999 121 88355687 我创建了一个空间索引 证明如下 db collection getIndexes v 1 key id
  • mongod 和 mongos 之间的确切区别是什么

    当我查看 MongoDB 文档时 我发现了两个不同的术语mongod and mongos 启动服务器时 我正在使用 mongod dbpath
  • 猫鼬递归填充

    我已经搜索了一段时间 但没有找到任何好的答案 我有n deep我存储在数据库中并且想要填充的树所有的父母所以最后我得到了完整的树 node parent parent parent 到目前为止 我已达到 2 级 正如我提到的 我需要达到 2
  • 如何定义导入mongodb的分隔符

    我有一个数据集合 它由 特点 我将把数据收集添加到mongodb 所以我需要通过分离数据 特点 怎么样我的蒙戈进口公司命令看起来像 之前我已经成功导入csv通过以下命令创建文件 mongoimport d mydb c things typ
  • 如何在 C# 中为 mongodb 文档的条目使用不同的名称?

    我正在尝试对以下文档进行 CRUD 操作MongoDB and C 我希望在 C 中使用具有长有意义的属性名称的固定结构化域实体 但由于每个属性的名称将保存在每个文档的 MongoDB 中 所以这不是一个好主意 这是因为属性名称将被冗余地保
  • 如何在 Mongo 聚合管道的 $unwind 阶段保留零长度值?

    我正在使用聚合管道编写 Mongo 查询 在聚合过程中 我需要 unwind领域之一 但是 我不想要 unwind排除该字段具有零长度数组的条目 因为我仍然需要它们进一步深入管道 我的领域叫做items它是一个对象数组 每个对象包含两个值
  • Cygnus版本升级导致STH-Comet读取查询日志差异

    我正在研究 Cygnus 和 STH Comet 想了解 Cygnus 版本升级的影响 我使用以下 docker compose yml 创建了一个环境 而且 我已经在注释掉的部分中切换了 Cygnus 版本来进行调查 docker com
  • 将包含 sum 和 group_concat 的 mysql 查询转换为 mongodb 查询

    我想将下面的 mysql 查询转换为 mongodb 查询 SELECT substring o schedule datetime 1 4 Year SUM IF o order status in SUCCESS SUCCESS 1 0
  • Meteor 独特客户端集合的发布/订阅策略

    使用 Meteor 我想知道如何最好地处理共享相同服务器端数据库集合的不同客户端集合 考虑以下示例 我有一个User集合 在我的客户端我有一个好友用户列表我有一个搜索功能 可以对整个用户数据库执行查询 返回一个与查询匹配的用户名列表 在发布
  • Mongodb 聚合使用 $group 两次

    我在 mongo 中有一堆文档 其结构如下 id number 2 colour id name Green hex 00ff00 position id name Defence type position ageGroup id nam
  • Morphia - 未在 dbObj 中找到定义的类

    我有一个相当有趣的问题 当尝试从 Mongo 实例加载模型时 Morphia 会抛出以下错误 22 17 13 WARN Class not found defined in dbObj java lang ClassNotFoundExc
  • Mongodb简单前缀查询与正则表达式和排序很慢

    我被这个简单的前缀查询困住了 虽然蒙戈文档 http www mongodb org display DOCS Advanced Queries AdvancedQueries RegularExpressions声明您可以通过使用前缀正则
  • 猫鼬模式创建

    我刚刚开始使用猫鼬 我有一个使用 mongoose 的创建脚本 它使用示例数据创建模式和数据库 现在我编写实际的应用程序 我是否需要在每次应用程序运行时创建架构对象 或者它是否已经以某种方式可用 换句话说 我是否需要在每个使用 mongoo
  • 使用mongodb聚合框架按数组长度分组

    我有一个看起来像这样的集合 id id0 name saved things id id1 name saved things id id2 name saved things etc 我想使用 mongodb 的聚合框架来得出一个直方图结
  • MongoDB:如何使用单个命令更新多个文档?

    我惊讶地发现以下示例代码仅更新单个文档 gt db test save id 1 foo bar gt db test save id 2 foo bar gt db test update foo bar set test success
  • 在 MongoDB 中查找 7 天前的记录

    我有一个包含对象的集合 如下所示 1 id ObjectId 551c6605e4c6ac495c923aab sender id ObjectId 551c6605e4c6ac495c923aac rep sender id 38 sen
  • mongodb在windows下无法启动?

    当我尝试在命令行上使用命令 mongod exe 启动 mongodb 时 它会抛出以下错误 C mongodb win32 x86 64 2 0 6 bin gt mongod exe mongod exe help for help a
  • Windows 7 机器上的 MongoDB:无法建立连接

    在 Windows 7 机器上使用 mongod exe 启动 Mongo 后 我尝试启动 mongo shell 但失败并出现以下错误 无法连接到 127 0 0 1 27017 原因 errno 10061 否 由于目标机器主动拒绝而无
  • 检索 mongoDB 文档中的空数组或 null

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

随机推荐