gpt4 book ai didi

MongoDB 4.0 事务 : ACID Read + Write?

转载 作者:可可西里 更新时间:2023-11-01 09:56:56 24 4
gpt4 key购买 nike

所以MongoDB 4.0自带了多文档事务。我的问题是,这是否启用了与 SQL 过程相同的功能?

用例是

  1. 锁定一个集合
  2. 阅读收藏
  3. 根据2的结果写入集合。
  4. 提交/中止

常见的数据库驱动程序通常只会叠加您发出的任何命令,直到您调用提交,然后在数据库的机器上一个接一个地运行它们。因此,我在服务器代码中运行的任何读取都在事务实际提交之前运行,因此其他连接可能会在读取和写入操作之间更改数据。

MongoDB 4.0 会涵盖这个功能吗?

最佳答案

Will MongoDB 4.0 cover this functionality?

对于原子性,简短的回答是肯定的。

在 MongoDB 中,Transactions (也称为多文档交易)与 session 相关联.也就是说,您为一个 session 启动一个事务。在任何给定时间,您最多可以为一个 session 打开一个事务。

您不能锁定整个集合以进行写入。您可能希望创建多个事务以确保写入不会在您的进程之间交错/覆盖。 MongoDB 使用 Optimistic Locking而不是 Pessimistic Locking .

So any read I run in my server code are run before the transaction is actually commited and therefore other connections could alter data in between read and write operations

与 MongoDB 多文档事务类似。例如,使用 mongo shell :

s1 = Mongo().startSession() 
sessionTest = s1.getDatabase("databaseName").test;
s1.startTransaction()
sessionTest.find({a:"foo"})
> {_id: ObjectId(..), a:"foo", b:1}

// Let's update the record outside of the session (i.e. another process)
db.test.update({a:"foo"}, {$set:{b:2}})

sessionTest.update({a:"foo"}, {$set:{b:9}})
// You'll get a WriteConflict error because the the document has been modified outside of the session.

另请注意,当事务处于打开状态时,事务中的操作所做的数据更改在事务外是不可见的。

  • 当事务提交时,所有数据更改都将被保存并在事务外可见,事务结束。
  • 当事务中止时,事务中写入所做的所有数据更改都将被丢弃,而不会变得可见,事务结束。

另见 Atomicity Example .

值得注意的是,MongoDB 是一个 distributed database ,因此您还需要了解不同的一致性选项。您可以在启动时指定这些选项 Session.startTransaction()取决于用例:

多文档事务支持阅读偏好primary并且给定事务中的所有操作必须路由到同一成员。

您可能还对 Engineering Chalk and Talks: MongoDB Transactions 感兴趣包含 MongoDB 事务背后的一些技术解释的视频。

关于MongoDB 4.0 事务 : ACID Read + Write?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50626838/

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