更新/插入子文档时的mongodb性能

时间:2015-06-01 19:02:56

标签: node.js mongodb mongoose

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

所有集合中的每个文档都有一个字段来标识它所引用的表格(包含表格的名称),我正在使用upserts(mongoose的findOneAndReplace方法与{{1} })所有插入/更新。

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

1 个答案:

答案 0 :(得分:0)

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

另一方面,您可以节省读取操作,因为您需要查询单个集合而不是3.但是,与写入相比,缩放读取很容易,并且写入通常是瓶颈,所以它的类型很难说是否值得。