美文网首页程序员
MongoDB: 原子性和事务

MongoDB: 原子性和事务

作者: Tims_Wong | 来源:发表于2016-02-24 15:15 被阅读3255次

MongoDB: 原子性和事务

原文链接: Atomicity and Transactions

MongoDB中, 文档级别的的写操作是原子性的, 甚至是在对某个文档的操作中修改其多个内嵌的子文档, 也是原子性的.
在一个写操作同时修改多个文档的情况, 对其中单独的某个文档而言是原子的, 但是对整批文档而言并不是原子的, 其他的操作很可能会交错修改数据. 然而, 可以通过使用$isolated操作符, 隔离某个修改多个文档的写操作.

$isolated 操作符

通过使用$isolated操作符, 多文档写操作一旦开始写第一个文档,就会阻止其他进程交错修改. 这就确保了没有客户端可以看到数据变化, 直到写操作成功或者报错.

$isolated操作符不支持sharded clusters

然而 isolated 写操作无法提供 “all-or-nothing” 原子性的保障. 这意味着写操作出错时, 无法回滚发生错误之前的所有的变化.

注意:
$isolated 操作符会导致写操作请求一个集合级别的排它锁, 即使使用了支持文档级别锁的 WiredTiger 存储引擎的情况下也一样. 这意味着, $isolated 操作符会使得 WiredTiger 在操作期间单线程化.

再次重申一遍, $isolated操作符不支持sharded clusters

使用$isolated操作符的更新操作的例子, 请参见: $isolated
使用$isolated操作符删除操作的例子, 请参见: Isolate Remove Operations.

类事务语义

单个文档中可以内嵌多个子文档, 所以单文档原子性可以满足多数实际使用需求.对于涉及多文档的写操作序列必须作为一个单独的事务对待的情况, 可以在应用中实现一个two-phase commits 两步提交. 然而, two-phase commits只能提供类似事务的语义. 使用two-phase commits可以确保数据的一致性(最终结果的一致性), 但是可能会使得应用程序(不小心)读到在two-phase commits或rollback期间产生的中间数据.

关于two-phase commit 和 rollback的更多信息, 请参见: Perform Two Phase Commits

并发控制

并发控制允许多个应用并发执行, 不会导致数据的不一致性或冲突. 方法一是在一个字段上创建一个唯一索引, 使得该字段只能有一个唯一的值. 这样就避免了插入或更新时带来重复数据. 对于多个字段, 在其上创建唯一索引来强制这些个字段值组合的唯一性. 例子请参见 update() and Unique IndexfindAndModify() and Unique Index. 另一个方法是为写操作在查询谓词中指定字段所期望的当前值, 具体例子请参见: Update if Current

two-phase commit 模式提供了一个变种, 在查询操作中, 其查询谓词中使用应用程序标识代替了某种期待的数据状态值.

请参阅

Read Isolation, Consistency, and Recency

相关文章

  • MongoDB: 原子性和事务

    MongoDB: 原子性和事务 原文链接: Atomicity and Transactions 在MongoDB...

  • 【转】MongoDB两阶段提交实现事务

    MongoDB数据库中操作单个文档总是原子性的,然而,涉及多个文档的操作,通常被作为一个“事务”,而不是原子性的。...

  • 69-MySQL-事务日志

    一、事务4大特性 1.1、原子性 事务的原子性由事务的 redo 日志和undo 日志来保证 1.2、一致性 事务...

  • ACID

    事务具有4个特征,分别是原子性、一致性、隔离性和持久性,简称事务的ACID特性; 一、原子性(atomicity)...

  • 事务ACID特征

    事务具有4个特征,分别是原子性、一致性、隔离性和持久性,简称事务的ACID特性; 一、原子性(atomicity)...

  • MySQL事务隔离级别

    事务一. 事务的特性(ACID) 原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确...

  • mysql 事务机制

    一、事务四大特性(ACID)原子性、一致性、隔离性、持久性 原子性(Atomicity):原子性是指,事务包含的所...

  • mysql事物属性

    事物 一、事务四大属性 分别是原子性、一致性、隔离性、持久性。 1、原子性(Atomicity) 原子性是指事务包...

  • MySQL

    事务的ACID 原子性、一致性、隔离型和持久性原子性: 包含多个操作的事务,要么全部执行成功,要么全部执行失败,不...

  • spring事务学习笔记

    事务的四个特性(ACID) ①、原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确...

网友评论

    本文标题:MongoDB: 原子性和事务

    本文链接:https://www.haomeiwen.com/subject/srkikttx.html