【问题标题】:Concurrent access to a document with mongoose使用 mongoose 并发访问文档
【发布时间】:2014-02-09 07:37:00
【问题描述】:

我正在编写一个 Web 应用程序,在该应用程序中,更多用户可以在 mongodb 的同一个文档中同时执行操作。 我使用 mean.io 堆栈,但我对它很陌生。 我想知道猫鼬如何管理并发。每个“用户单击”操作首先执行读取以获取文档,并在一些计算后执行保存。当然,序列读取-计算-保存不是原子的。 mongoose 是否适用于“最后更改获胜”策略,还是会引发版本控制错误? 在这种情况下使用队列有意义吗?

谢谢,最好的问候。

【问题讨论】:

    标签: node.js mongodb mongoose mean-stack


    【解决方案1】:

    是的,最后的更改将获胜。

    队列可能是解决问题的好选择,但我会建议其他 2 种方法:

    1. 您可以使用更高级的 mongodb 命令,例如 $inc (http://docs.mongodb.org/manual/reference/operator/update/inc/) 进行原子计算(如果您的计算过于复杂,可能无法实现)
    2. 如果您不一定需要随时提供正确的计数,您可以使用“大数据”方法并仅存储原始点击信息。 每当您需要数据时(或者说每小时或每天),您都可以使用 mongodb 聚合框架或其 mapreduce 功能来计算正确的计数。

    【讨论】:

    • 感谢您的回复。这对我来说是个好消息,因为我的用户对文档所做的更改在设计上是不冲突的(每个用户只更改他的文档部分)。
    • 然后确保只更新文档的那一部分,而不是检索整个文档,然后保存整个文档
    • 最后赢的并不完全正确:aaronheckmann.tumblr.com/post/48943525537/…
    • @saintmac 好点。当我使用 mongoose 获取文档时,我可以决定需要哪些字段。但是储蓄呢?我以为猫鼬只保存已更改的字段。我错了吗?
    猜你喜欢
    • 2019-03-10
    • 2020-01-18
    • 2017-07-20
    • 2013-03-28
    • 2016-08-10
    • 2016-09-13
    • 2018-11-22
    • 2016-05-13
    • 1970-01-01
    相关资源
    最近更新 更多