node.js - 更新/插入子文档时的 mongodb 性能

标签 node.js mongodb mongoose

我有一个 mongo 数据库,用于表示电子表格,其中三个集合分别表示单元格值(行、列、值)、单元格格式(行、列、表示格式的对象)和单元格大小(无论是行还是列大小、其索引和大小)。

所有集合中的每个文档还有一个字段来标识它引用的表(包含表的名称),并且我正在使用 upserts(mongoose 的 findOneAndReplace 方法与 upsert:true)进行所有插入/更新。

我正在考虑“将架构从里面拉出来”,通过保留一个代表表的集合并将先前包含在三个集合中的文档作为其中的子文档,因为我认为这会让它更有组织性。
但是,阅读子文档的主题,看起来在任何情况下每次插入/更新都需要两个查询(例如 see this question )。因此,我想知道我想到的更改是否会导致性能受到影响(我猜更新插入仍然需要进行搜索,然后更新或插入,因此幕后仍然有两个查询,但可能有一些我不知道的优化)并且在尝试简化架构时,我不仅会使插入/更新过程复杂化,而且还会降低性能。谢谢!

最佳答案

是的,性能受到影响。 MongoDB 有集合级更新锁。通过将所有内容保留在单个集合中,您最终会限制应用程序可以执行的并发更新操作的数量,从而导致性能下降。需要注意的是,它完全取决于您的应用程序如何进行写入。

另一方面,您可能会节省读取操作,因为您需要查询单个集合而不是 3 个集合。但是,与写入相比,扩展读取很容易,并且写入通常是瓶颈,因此很难说这是否值得。

关于node.js - 更新/插入子文档时的 mongodb 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30581212/

相关文章:

mongodb - 在 Spring JUnit @WebMvcTest 中使用嵌入式 MongoDB

mongodb - 在 MongoDB 中自动递增以存储唯一用户 ID 的序列

javascript - Meteor MongoDB 集合无法访问 Meteor 发布

node.js - 将测试数据库与 Restify 一起使用

node.js - 使用 mongoose 更新深度嵌套的子文档

javascript - 仅当服务器负载不重时才按间隔执行函数

json - NPM 不发布依赖

node.js - 外部调用功能

node.js - 为什么当我在 NodeJS 中导入护照时没有从 MongoDB 获取数据

javascript - JS - Express - Mongoose 在发送响应之前执行所有 Mongoose 的 promise