所以MongoDB 4.0带有多文档事务.我的问题是,这是否实现了与SQL程序相同的功能?
用例就是
常见的数据库驱动程序通常只会叠加您发出的任何命令,直到您调用commit,然后在db的计算机上依次运行它们.因此,我在服务器代码中运行的任何读取都在事务实际提交之前运行,因此其他连接可能会在读取和写入操作之间更改数据.
MongoDB 4.0会覆盖这个功能吗?
MongoDB 4.0会覆盖这个功能吗?
对于原子性,简短的回答是肯定的.
在MongoDB中,事务(也称为多文档事务)与会话相关联.也就是说,您为会话启动事务.在任何时候,你最多只能有一个用于会话打开的事务.
您无法锁定整个集合以进行写入.您可能希望创建多个事务以确保写入不会在进程之间进行隔行扫描/覆盖.MongoDB使用乐观锁定而不是悲观锁定.
因此,我在服务器代码中运行的任何读取都在事务实际提交之前运行,因此其他连接可能会在读取和写入操作之间更改数据
同样在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.
Run Code Online (Sandbox Code Playgroud)
另请注意,在事务处于打开状态时,事务中的操作不会在事务外部显示任何数据更改.
另请参见原子性示例.
值得注意的是MongoDB是一个分布式数据库,因此您还需要了解不同的一致性选项.您可以在启动Session.startTransaction()时指定这些选项,具体取决于用例:
读隔离(Read Concern):MongoDB多文档事务支持读取关注" 快照 "," 本地 "和" 多数 ".
多文档事务支持读取首选项主要,并且给定事务中的所有操作必须路由到同一成员.
您可能也对Engineering Chalk and Talks:MongoDB Transactions视频感兴趣,其中包含MongoDB事务背后的一些技术解释.
| 归档时间: |
|
| 查看次数: |
1375 次 |
| 最近记录: |