首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MongoDB:快照读取关注点不会锁定已读文档

MongoDB是一种开源的、面向文档的NoSQL数据库管理系统。它以高性能、可扩展性和灵活性而闻名,适用于各种应用场景。

快照读取是MongoDB中的一种读取操作方式,它允许在读取数据时不会锁定已读取的文档。这意味着在进行快照读取时,其他写操作可以继续进行,不会被阻塞。

快照读取的关注点主要有以下几点:

  1. 一致性:快照读取保证读取操作的一致性,即读取的数据是一个确定的时间点的快照。这对于需要读取一致性数据的应用场景非常重要。
  2. 并发性能:由于快照读取不会锁定已读取的文档,所以可以提高并发读取的性能。多个读取操作可以同时进行,不会相互阻塞。
  3. 数据完整性:快照读取保证读取操作的数据完整性,即读取的数据不会受到正在进行的写操作的影响。这确保了读取操作的结果是准确的。

快照读取适用于需要读取一致性数据的场景,例如数据分析、报表生成等。在这些场景下,快照读取可以提供准确的数据,并且不会对其他写操作造成阻塞。

腾讯云提供了一系列与MongoDB相关的产品和服务,包括云数据库MongoDB、云数据库TDSQL for MongoDB等。这些产品提供了高可用性、高性能的MongoDB数据库服务,可以满足各种规模和需求的应用场景。

更多关于腾讯云MongoDB产品的信息,您可以访问以下链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

云测评-MongoDB存储引擎谁更强

日志目录 屏幕快照 2019-03-29 上午10.33.34.png 锁和并发 MMAPV1:版本2.6之前:使用读写锁锁定,允许对数据库进行并发读取访问,但允许对单个写入操作进行独占访问。...当存在读锁时,许多操作可能使用此锁。 但是,当存在写锁定时,单个写入操作将独占地保持锁定,并且没有其他读取或写入操作可以共享锁定。...从3.0开始:MMAPv1存储引擎在3.0版本系列中使用了集合级别锁定,这是对早期版本的改进,其中数据库锁定是最精细的锁定。 WiredTiger:支持文档锁定。...锁和并发 2.6版本之前,MongoDB使用读写锁锁定,允许对数据库进行并发读取访问,但对单个写入操作进行独占访问。...从3.0开始,使用集合级锁定 支持文档锁定 事务 对单个文档的操作是原子的 4.0版本开始支持多文档事务 CPU性能 添加CPU核数并不能提高性能 多核系统性能有明显提升 加密 不支持 MongoDB

2.3K70

「数据库架构」三分钟搞懂事务隔离级别和脏

许多数据库的默认设置为“读取已提交”,它仅保证在进行该事务时您不会看到过渡中的数据。它通过在读取期间短暂地获取锁来实现此目的,同时保持写入锁直到事务被提交。...也就是说,幻像读取是不可能的。 读取稳定性映射到ANSI SQL的可重复读取。 默认情况下,“游标稳定性”用于“读取已提交”。从9.7版开始,快照语义生效。...MongoDB中的隔离级别 如前所述,MongoDB不支持事务。从手册中 由于MongoDB仅单文档操作是原子操作,因此两阶段提交只能提供类似于事务的语义。...但是与MongoDB不同,它确实使用多版本并发控制来防止脏读取请求在请求开始时始终会看到您数据库的最新快照。...该文档尚不清楚,但在建立索引时似乎使用快照。如果是这样,脏应该不是问题。但是由于延迟索引更新,您仍然无法获得真正的“读取已提交”隔离级别。 与许多NoSQL数据库一样,它不直接支持事务。

1.4K30
  • 一文读懂MongoDB事务处理

    如果在事务内部运行会导致文档插入的写操作(例如insert或带有upsert: true的更新操作),必须在存在的集合上才能执行。 从MongoDB 4.4开始,你可以隐式或显式地在事务中创建集合。...对于分片集群上的事务,"local"关注不能保证数据来自同一个跨分片的快照视图。如果需要快照隔离,请使用 "snapshot"关注。...对于分片集群上的事务,"majority"关注不能保证数据来自同一个跨分片的快照视图。如果需要快照隔离,请使用"snapshot"关注。...当使用w: "majority"写关注提交时,事务级w: "majority"关注可以确保操作能读取到大多数已提交的数据。对于分片集群上的事务,这种大多数已提交数据的视图在分片之间不会同步。...如果事务的任何读取或写入操作涉及禁用关注"majority"的分片,则其跨越多个分片进行写入操作的事务会出错并中止。

    2.6K20

    精通Java事务编程(4)-弱隔离级别之防止更新丢失

    应用从DB一些值,修改它并写回修改后的值,则可能导致丢失更新。...如下指令在大多数关系DB中并发安全: UPDATE counters SET value = value + 1 WHERE key = 'foo'; 类似像: MongoDB文档DB提供了对 JSON...实现方案 一般采用对读取对象加排它锁来实现,以便在更新完成之前没有其他事务可以它。这种技术有时被称为游标稳定性(cursor stability) 另一个实现方案是强制所有的原子操作在单线程执行。...但ORM框架很容易导致执行不安全的读取 - 修改 - 写入,而不是使用数据库提供的原子操作。若你知道自己在做什么,或许这不会引发什么问题,但往往会埋下潜在Bug。...PostgreSQL的可重复读,Oracle的可串行化和 SQL Server 的快照隔离级别,都能自动检测到丢失更新,并中止违规的事务。但MySQL/InnoDB的可重复读并不会检测丢失更新。

    62020

    常见问题:并发

    为了确保一致性,它使用锁定和其他并发控制措施来防止多个客户端同时修改同一条数据。总之,这些机制保证对单个文档的所有写入完全或根本不发生,并且客户端永远不会看到数据的不一致视图。...MongoDB使用-写锁,允许并发操作以共享的方式访问资源(如一个数据库或一个集合),但在MMAPv1中,对单个写入操作采取独占(排它)的访问方式。...然而,MongoDB实际上将授予所有IS和S模式,一旦它们全部完成,它将授予X,即使新的IS或S请求在此期间进入排队。...l 用户身份验证对于使用 2.6用户凭据的部署,需要在admin库上获取一个锁。对于使用2.4模式进行用户凭据的部署,身份验证会锁定 admin数据库同时也会锁定用户正在访问的数据库。...从版本4.0开始,对于需要原子性来更新多个文档读取多个文档之间的一致性的情况,MongoDB 为副本集提供多文档事务,并计划在MongoDB 4.2中提供分片集群的事务。

    1.6K30

    MongoDB 基础浅谈

    视图是实时计算并读取的。 6 MongoDB 索引 MongoDB 支持丰富的索引方式。如果没有索引,操作就必须扫描集合中的每个文档并筛选符合查询条件的记录。索引能够在很大程度上提高查询速度。...只对读取单个文档时有效,且可能导致非常慢的,因此总是建议配合使用 maxTimeMS 使用。...如果事务是因果一致会话的一部分,且 write concern 为 majority,则在事务提交后,操作可以保证已从多数提交数据的快照读取,该快照提供与该事务开始之前的操作的因果一致性。...因为所有的都将使用同一个快照,直到事务提交为止该快照才被释放。...如果事务未指定 write concern 为 majority 级别,则不保证操作可以读取多数提交的数据。对于分片群集上的事务,不能保证数据是从整个分片的同一快照视图中获取。

    1.4K30

    MongoDB部署检查列表建议

    除了_id 索引之外,您必须显式地创建所有索引:MongoDB不会自动创建除_id之外的任何索引。...不要使用辅助读取来扩展总体吞吐量。请参阅:是否可以使用更多副本节点进行扩展,以了解读取扩展的概述。有关辅助读取的信息,请参阅:读取偏好 。 分片 确保片键将负载均匀地分配到分片上。...对于MongoDB 3.4和更早版本,从主节点读取非目标或广播查询,因为这些查询可能对过时或孤立的数据敏感。 对于MongoDB 3.6和更高版本,辅助设备不再返回孤立数据,除非使用可用的策略。...因此,不使用“可用”的非目标或广播查询可以安全地在任何成员上运行,并且不会返回孤立的数据。 "可用"的读取策略可以从辅助成员返回孤立文档,因为它不检查更新的块元数据。...但是如果孤立文档的返回对于应用程序来说无关紧要,那么"可用"的读取策略提供了各种读取关注点中可能的最低延迟读取。 在将大数据集插入新的非哈希分片集合时需要预分割并手动平衡块。

    1.2K30

    扩展你的复制集:MongoDB 4.0中从节点的非阻塞操作

    如果你在一个文档中更改了字段“A”,然后更改了字段“B”,则不可能看到此文档字段“B”被更改而字段“A”未被更改的状态。你可能会在最终一致性系统内看到这种现象,但在MongoDB不会。...当批量应用写操作时,我们必须阻塞操作,使应用程序不会看到以“错误”顺序应用的数据。这就是为什么由从节点读取数据时,必须定期等待副本批量数据的应用。...这意味着,在存在大量操作的情况下,副本数据的写入可能会出现滞后——当链式复制(chain replication)被启用时,这个问题会相当复杂。 MongoDB 4.0的目标是什么?...对从节点的读取操作现在同样可以利用快照,方法是从在应用当前的批量副本数据之前的最新的一致性快照读取数据。...从该快照读取可以确保数据的一致性视图,而且由于应用当前的批量副本数据不会更改这些早期记录,因此我们现在可以不再使用锁,而允许在写入发生的同时进行所有这些对从节点的读取。 区别有多大区别非常大!

    92930

    扩展你的复制集:MongoDB 4.0中从节点的非阻塞操作

    如果你在一个文档中更改了字段“A”,然后更改了字段“B”,则不可能看到此文档字段“B”被更改而字段“A”未被更改的状态。你可能会在最终一致性系统内看到这种现象,但在MongoDB不会。...当批量应用写操作时,我们必须阻塞操作,使应用程序不会看到以“错误”顺序应用的数据。这就是为什么由从节点读取数据时,必须定期等待副本批量数据的应用。...这意味着,在存在大量操作的情况下,副本数据的写入可能会出现滞后——当链式复制(chain replication)被启用时,这个问题会相当复杂。 MongoDB 4.0的目标是什么?...对从节点的读取操作现在同样可以利用快照,方法是从在应用当前的批量副本数据之前的最新的一致性快照读取数据。...从该快照读取可以确保数据的一致性视图,而且由于应用当前的批量副本数据不会更改这些早期记录,因此我们现在可以不再使用锁,而允许在写入发生的同时进行所有这些对从节点的读取。 区别有多大? 区别非常大!

    80030

    扩展你的复制集:MongoDB 4.0中从节点的非阻塞操作

    如果你在一个文档中更改了字段“A”,然后更改了字段“B”,则不可能看到此文档字段“B”被更改而字段“A”未被更改的状态。你可能会在最终一致性系统内看到这种现象,但在MongoDB不会。...当批量应用写操作时,我们必须阻塞操作,使应用程序不会看到以“错误”顺序应用的数据。这就是为什么由从节点读取数据时,必须定期等待副本批量数据的应用。...这意味着,在存在大量操作的情况下,副本数据的写入可能会出现滞后——当链式复制(chain replication)被启用时,这个问题会相当复杂。 MongoDB 4.0的目标是什么?...对从节点的读取操作现在同样可以利用快照,方法是从在应用当前的批量副本数据之前的最新的一致性快照读取数据。...从该快照读取可以确保数据的一致性视图,而且由于应用当前的批量副本数据不会更改这些早期记录,因此我们现在可以不再使用锁,而允许在写入发生的同时进行所有这些对从节点的读取。 区别有多大? 区别非常大!

    70030

    MySQL InnoDB 锁和事务

    锁 标准行级锁:共享锁和排它锁 特殊的锁:意向锁 一致性非锁定: 指InnoDB存储引擎通过行多版本控制的方式读取当前执行时间数据库中行的数据,如果读取的行正在执行delete或者update...操作,这时读取操作不会去等待行锁的释放,相反的会去读取行的一个快照数据 在事务隔离级别READ COMMITTED和REPEATABLE READ(默认事务级别)下,InnoDB使用费一致性锁定性锁,...但对于快照数据的定义却不一样,READ COMMITTED总是读取最新的一份快照数据,而REPEATABLE READ读取的是事务开始时的快照数据 一致性锁定: 在某些情况下,用户需要显示的对数据库读取操作进行加锁以保证数据逻辑的一致性...,而这要求数据库支持加锁语句,innodb对于select语句支持两种一致性的锁定操作: select … for update 对读取的行加一个X锁,其他事务不能对锁定的行加任何锁 select...… lock in share mode 对读取的行加一个S锁,其他事务可以向锁定的行加S锁,但是加X锁会阻塞 对于一致性非锁定,即使读取的行已经加了X锁,也是可以被读取的。

    80930

    掌握WiredTiger存储引擎,帮你解决分布式事务难题!

    MongoDB从 3.0版本引入WiredTiger存储引擎之后开始支持事务,MongoDB 3.6之前的版本只能支持单文档的事务,从MongoDB 4.0版本开始支持复制集部署模式下的事务,从MongoDB...WiredTiger本身支持多种不同类型的隔离级别,如-未提交(read-uncommitted)、-已提交(read-committed)和快照(snapshot)隔离。...MongoDB默认选择的是快照隔离。 持久性(Durability):一旦提交事务,数据的更改就不会丢失。 在不同隔离级别下,一个事务的生命周期内,可能出现脏、不可重复读、幻等现象。...通过事务可以看到其他还未提交的事务修改的行版本数据,但不会看到事务id大于snap_max的事务修改的数据。 快照数据的获取流程如下图所示。...(5)B事务尝试重新提交,此时再次读取的版本号为2,加1后版本号变为3,不会产生冲突,正常提交B事务。 通过代码分析事务的并发与冲突。

    51510

    技术干货| MongoDB事务原理

    MongoDB从 3.0版本引入WiredTiger存储引擎之后开始支持事务,MongoDB 3.6之前的版本只能支持单文档的事务,从MongoDB 4.0版本开始支持复制集部署模式下的事务,从MongoDB...WiredTiger本身支持多种不同类型的隔离级别,如-未提交(read-uncommitted)、-已提交(read-committed)和快照(snapshot)隔离。...MongoDB默认选择的是快照隔离。 持久性(Durability):一旦提交事务,数据的更改就不会丢失。 在不同隔离级别下,一个事务的生命周期内,可能出现脏、不可重复读、幻等现象。...通过事务可以看到其他还未提交的事务修改的行版本数据,但不会看到事务id大于snap_max的事务修改的数据。 快照数据的获取流程如下图所示。...(5)B事务尝试重新提交,此时再次读取的版本号为2,加1后版本号变为3,不会产生冲突,正常提交B事务。 通过代码分析事务的并发与冲突。

    1.4K10

    MongoDB 4.0 系列之 —— 事务实现解析(二)

    的语义,如果设置为true,不论从哪个节点读取MongoDB 会保证 “read your own write” 的语义。...Isolation MongoDB 提供 snapshot 隔离级别,在事务开始创建一个 WiredTiger snapshot,然后在整个事务过程中使用这个快照提供事务。...有了 read "as of" a timestamp 特性后,在重放 oplog 时,备节点上的不会再跟重放 oplog 有冲突了,不会因重放 oplog 而阻塞请求,这是4.0版本一个巨大的提升...从上面的代码可以看到,再引入事务时间戳之后,在可见性判断时,还会额外检查时间戳,上层读取时指定了时间戳,则只能看到该时间戳以前的数据。...WiredTiger 提供设置 oldest timestamp 的功能,允许由 MongoDB 来设置该时间戳,含义是Read as of a timestamp 不会提供更小的时间戳来进行一致性

    1.3K20

    关于mysql的事务,这些你都了解了么?

    当自适应哈希索引搜索系统被分区时,单个事务不会锁定整个自适应哈希索引。自适应哈希索引分区由 innodb_adaptive_hash_index_parts,默认设置为8。...`lock_table` varchar(1024) NOT NULL DEFAULT '', #锁定或包含锁定记录的表的名称。...例如,串行化事务隔离级别对读取的记录加S锁了,当其他的事务需要读取这条记录的时候会立即授予,当其他事务需要修改这条记录获取X写锁时就必须阻塞等待了 GAP(间隙锁):锁定一个区间的记录数。...是因为mysql使用了MVCC(多版本并发控制)技术,事务内首次时生成了快照,再次记录其实就是读取快照的内容,所以就涉及到了快照读和当前快照读:读取数据的可见版本。...不加事务的select操作都是快照读,加事务的情况下要看事务隔离级别。如READ_UNCOMMITTED情况下就可能读到最新未提交的记录 当前读取数据的最新版本。

    23820

    SQL Server 事务隔离级别

    :读到了其他事务修改但未提交的数据 不可重复读:由于其他事务的修改,导致同一事务中两次查询读到的数据不同( 幻:由于其他事务的修改,导致同一事务中两次查询读到的记录数不同(的时候不能写) 可能有人对幻和不可重复读的定义不太理解...,即如果有DML事务正在执行,那么select语句不会被阻塞而是读取这些DML事务预先生成的前镜像,这种只会在表上加Sch-S锁,其他的行锁页锁全部没有。...3.已提交快照 SQL Server特有的隔离级别,主要是为了匹配Oracle的已提交实现的功能,在此隔离级别下,select只会对表加一个Sch-S锁,因此select不会引发在阻塞,但是会加大tempdb...键范围锁的机制基本与Mysql中的范围锁相似,主要是为了防止幻,其机制在于select操作不但会将读到的键值锁定,还会将上下键值的范围也锁定。...在快照隔离级别下通过mvcc实现了select不阻塞,同时由于是事务级的快照,也顺带避免了不可重复读和幻

    1.2K20

    三分钟小短文:一致性非锁定与一致性锁定

    台上三分钟,台下三小时,兄弟们,今天咱们花三分钟了解下数据库中的两种(select)操作:一致性非锁定 和 一致性锁定 一致性非锁定 一致性非锁定是什么?...这里我先给出一个最最最简单的解释:一致性非锁定就是快照快照即当前行数据之前的历史版本,每行记录可能存在多个历史版本,或者说每行记录可能有不止一个快照数据,一般我们将这种技术称为 行多版本技术。...并且,即使都是使用非锁定的一致性,它俩对于快照数据的定义也各不相同: 在 READ COMMITTED 事务隔离级别下,总是读取行的最新版本;如果行被锁定了,非一致性不会因此去等待行上锁的释放,而是去读取该行版本的最新一个快照...,如下图所示: img 在 REPEATABLE READ 事务隔离级别下,对于快照数据,非一致性总是读取事务开始时的行数据版本 这么说可能还不是很好理解,举个例子,这个时候又得掏出我们经典的 user...,比如在 READ COMMITTED 隔离级别下,即使行被锁定了,非一致性也可以读到该行版本的最新一个快照

    40420

    MongoDB 4.0 系列之b —— 事务实现解析(bb二)

    的语义,如果设置为true,不论从哪个节点读取MongoDB 会保证 “read your own write” 的语义。...Isolation MongoDB 提供 snapshot 隔离级别,在事务开始创建一个 WiredTiger snapshot,然后在整个事务过程中使用这个快照提供事务。...有了 read "as of" a timestamp 特性后,在重放 oplog 时,备节点上的不会再跟重放 oplog 有冲突了,不会因重放 oplog 而阻塞请求,这是4.0版本一个巨大的提升...从上面的代码可以看到,再引入事务时间戳之后,在可见性判断时,还会额外检查时间戳,上层读取时指定了时间戳,则只能看到该时间戳以前的数据。...WiredTiger 提供设置 oldest timestamp 的功能,允许由 MongoDB 来设置该时间戳,含义是Read as of a timestamp 不会提供更小的时间戳来进行一致性

    73920

    本周新鲜事:开源那些事

    本周 MongoDB 4.0 正式发布,此次更新涉及到的一些内容: 多文档事务,结合 MongoDB 文档模型内嵌数组、文档的支持,目前的单文档事务能满足绝大部分开发者的需求。...为了让 MongoDB 能适应更多的应用场景,让开发变得更简单,MongoDB 4.0 将支持复制集内部跨一或多个集合的多文档事务,保证针对多个文档的更新的原子性。...聚合类型转换,MongoDB 4.0 引入了新的聚合操作符 $convert, 允许用户在 aggregation pipeline 里将文档的字段转换成统一的类型输出,使得数据消费端,比如 MongoDB...非阻塞的备节点,借助事务功能中 storage engine timestamps and snapshots的实现,引擎层可以很容易的实现「指定时间戳快照读取的功能」,使得备节点上的请求无需阻塞等待就能读到一致时间点的数据...这个特性将极大的提升 MongoDB 扩展的能力。 END

    52520
    领券