gpt4 book ai didi

mongodb - Mongoose 版本控制 : when is it safe to disable it?

转载 作者:行者123 更新时间:2023-12-01 23:45:28 25 4
gpt4 key购买 nike

来自docs :

The versionKey is a property set on each document when first created by Mongoose. This keys value contains the internal revision of the document. The name of this document property is configurable. The default is __v. If this conflicts with your application you can configure as such:

[...]

Document versioning can also be disabled by setting the versionKey to false. DO NOT disable versioning unless you know what you are doing.

但我很好奇,在什么情况下禁用此功能应该是安全的?

最佳答案

版本 key 的目的是乐观锁定。

启用后,每当更新文档时,版本值都会自动递增。

这允许您的应用程序代码测试在获取(例如引入版本 key 42)和后续更新(确保版本值仍然是 42)之间是否进行了更改。如果版本键具有不同的值(例如,43,因为已对文档进行了更新),您的应用程序代码可以处理并发修改。

在关系数据库中经常使用相同的概念,而不是可能带来可怕性能的悲观锁定。所有像样的 ORM 都提供这样的功能。例如,它被很好地描述了 in ObjectDB documentation 。它是一个用 Java 实现的对象数据库,但应用相同的概念。

blog post Behlül 评论中链接的内容通过具体示例演示了乐观锁定的有用性,但仅适用于数组更改,请参见下文。

相反,这是一个没有用的简单情况:可以由其所有者自己编辑的用户配置文件。在这里,您可以摆脱乐观锁定并假设最后一次编辑总是获胜。

因此,只有您知道您的应用程序是否需要乐观锁定。用例逐个用例。

Mongoose 的情况有些特殊。

乐观锁仅对数组启用,因为内部存储格式使用位置索引。这是 blog post 描述的问题链接在问题的评论中。我找到了explanation mongoose-orm 邮件列表中给出的内容非常清楚:如果您需要对其他字段进行乐观锁定,则需要自己处理。

这是一个gist展示如何为 add 操作实现重试策略。同样,您想要如何处理它取决于您的用例,但这应该足以让您开始。

我希望这能解决问题。

干杯

关于mongodb - Mongoose 版本控制 : when is it safe to disable it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17810637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com