首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏DOTNET

    MongoDB模拟文档事务操作

    Mongodb不支持文档原子性操作,因此依据两阶段提交协议(Two Phase Commits protocol)来模拟事务。 以两个银行账户之间的转账行为为例,来说明如何实现文档间的事务操作。 为实现文档间的事务操作,定义一个事务文档TransactionDocument,储存在事务集合TransactionCollection中 public class TransactionDocument2 这样做是为了防止多个客户端同时对一个账户执行修改操作,只有一个这种事务文档,那么当AB间的转账行为开始时,事务文档的状态为“pending”,而事务开始要查找的是状态为“initial”的事务文档,因此不会获得这样的事务文档 对两个账户应用事务的具体操作就是向A、B两个账户的待处理事务链表中添加事务文档_id。 第4步,第3步执行成功的前提下,将事务文档状态由“pending”更改为“applied”。 第5步,第4步执行成功的前提下,移除事务标识。 具体操作是:移除第3步中向A、B两个账户的待处理事务链表中添加的事务文档_id。

    1.5K90发布于 2018-03-08
  • 来自专栏jeremy的技术点滴

    mongodb4.0文档事务尝鲜

    mongodb4.0也出来一段时间了,这个版本最为大众期待的特性就是支持了文档事务(multi-document transaction),本文记录一下尝鲜该特性的过程。 mongodb文档事务 In MongoDB, an operation on a single document is atomic. 而因为在mongodb里还可以采用嵌入式文档和数组来描述文档中的数据结构关系,所以这种单文档原子性基本消除了许多实际对文档事务的需求。 另外4.0版本仅支持复制集中的文档事务,分片集群中的文档事务将计划在4.2版本中实现。 虽然有以上这些限制,还再怎么说也多了文档事务能力,比以前还是进步了的。 go语言支持 mongodb社区版go语言驱动目前还没有支持mongodb4.0的文档事务特性,看其开发计划,短期是不太可能支持了。

    1.5K30发布于 2019-03-13
  • 来自专栏陶士涵的菜地

    MVCC 版本并发控制实现的事务

    1.没有一个统一的实现标准,实现了非阻塞的读操作,写操作也只锁定必要的行 2.通过保存数据在某个时间点的快照实现的 3.典型的有乐观并发控制和悲观并发控制 4.innodb的mvcc是每次事务都有递增的版本号 ,通过在每行记录的后面添加两列隐藏字段,两列分别是是创建版本号和删除版本号,存储操作它事务的版本号 5.在事务中增删改查就是对两列版本号字段进行操作 insert 为新插入的每一行保存当前事务版本号到 行创建版本号字段 update 插入一行新的保存当前事务创建版本号,修改原行数据的删除版本号为本次事务的版本号 delete 修改行的删除版本号字段为本次事务的版本号 select 查询 创建版本号字段 小于等于当前事务版本的数据 确保该记录是本次之前就存在的或本次事务新插的 查询 删除版本号字段 不存在或者大于当前版本的数据 确保该记录在本次事务之前没删除 6.这样的设计就不需要加锁了

    48510发布于 2019-09-10
  • 来自专栏芋道源码1024

    MongoDB 4.0 正式发布,支持文档事务

    在 4.0 正式发布之前,我们已经报道了其相关更新信息,此次正式发布版本中我们可以看到一些特性得以保留,包括文档事务和聚合类型转换等: MongoDB 4.0 首个 RC 版发布,支持文档事务 分布式文档存储数据库 MongoDB 4.0.0 RC 2 发布 MongoDB 4.0.0-rc4 发布,分布式文档存储数据库 重大功能,MongoDB 4.0 将正式支持 ACID 事务 下边是此次更新涉及到的一些内容 : Multi-Document Transactions,文档事务 MongoDB 4.0 提供了针对副本集执行文档事务的功能。 对于文档事务,在事务提交之前,事务中的任何写操作在事务外都不可见。也就是说,文档交易是原子的。 Aggregation,聚合 MongoDB 4.0 为类型转换添加了以下新的聚合操作符: ?

    1.3K00发布于 2018-07-31
  • MySQL事务隔离实现原理,版本并发控制MVCC

    MVCCMVCC,全称Multi-Version Concurrency Control,即版本并发控制。 提高数据库的并发查询能力)像不加锁的select操作就是快照读,即不加锁的非阻塞读;快照读的前提是隔离级别不是串行级别,串行级别下的快照读会退化成当前读;之所以出现快照读的情况,是基于提高并发性能的考虑,快照读的实现是基于版本并发控制 ,即MVCC,可以认为MVCC是行锁的一个变种,但它在很多情况下,避免了加锁操作,降低了开销;既然是基于版本,即快照读可能读到的并不一定是数据的最新版本,而有可能是之前的历史版本。 当前读、快照读、MVCC关系MVCC版本并发控制指的是维持一个数据的多个版本,使得读写操作没有冲突,快照读是MySQL为实现MVCC的一个非阻塞读功能。 MVCC的整体处理流程假设有四个事务同时在执行,如下图所示:事务1 事务2 事务3 事务4 事务开始事务开始事务开始事务开始 ...... ...... ......

    58310编辑于 2024-07-03
  • 来自专栏个人技术博客

    ⑩⑧【MySQL】InnoDB架构、事务原理、MVCC版本并发控制

    事务的原理 事务事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 事务四大特性: 原子性(Atomicity) 事务是不可分割的最小操作单元,要么全部成功,要么全部失败。 一致性(Consistency) 事务完成时,必须使所有的数据都保持一致状态。 ⚪redo log 重做日志 - redo log: 重做日志 ,记录的是事务提交时数据页的物理修改,是用来实现事务的持久性 。 ⚪undo log 回滚日志 - undo log: 回滚日志 ,用于记录数据被修改前的信息,作用包含两个:提供回滚 和 MVCC(版本并发控制) 。 版本并发控制 - MVCC: 全称Multi--Version Concurrency Control,版本并发控制 。

    64920编辑于 2023-11-21
  • 来自专栏CodingToDie

    MySQL 事务隔离级别和版本并发控制MVCC

    MySQL 事务隔离级别和版本并发控制MVCC MySQL 提供了两种事务型的存储引擎:InnoDB 和 NDB Cluster 。另外还有一些第三方存储引擎也支持事务 ---- 1. 版本并发控制(MVCC)4.1 InnoDB 的MVCC5. 混合存储引擎下的事务问题6. A: 因为InnoDB有MVCC机制(版本并发控制),可以使用快照读,而不会被阻塞。 版本并发控制(MVCC) MySQL 大部分事务型存储引擎并不是简单的行级锁。 基于提升并发行的考虑,它们一般都同时实现了版本并发控制 MVCC. 4.1 InnoDB 的MVCC InnoDB 的 MVCC ,是通过在每行记录后面保存两个隐藏的列来实现的。

    1.3K10发布于 2021-03-19
  • 来自专栏关忆北.

    MySQL-MVCC版本控制及事务的隔离性

    MySQL的MVCC快照 MVCC:Multiversion concurrency control,即版本控制,在并发访问数据库时,通过对数据做版本管理,也就是为每条记录保存份历史数据供读事务访问 版本指的是数据表中同一个行数据可能会有多个版本(row),每次事务更新数据的时候,都会生成一个新的数据版本,并且把 transaction id 赋值给这个数据版本的事务 ID,记为 row trx_id InnoDB中每一个事务都有一个唯一的事务ID,叫做transaction id,每个事务在开始的时候向InnoDB事务系统申请的,其值按申请的顺序严格递增。 A查询到的k值为1,因为事务A首先启动,创建事务id,接着是事务B,事务B的row trx_id会大于事务A,落在高水位未开始事务中,数据修改对A不可见,事务C隐式开启事务,执行完成后隐式提交,由于同样 事务B查询到的k值为3,事务B首先开启事务事务C随后开启,事务C将k=1修改为k=2,由于在修改时会使用“当前读”来查询数据的最新版本来保证数据的修改不会丢失,所以事务B在执行update语句前会查询到当前版本

    52850编辑于 2023-10-11
  • 来自专栏MongoDB中文社区

    Java与MongoDB 4.0文档事务新特性体验

    作者:Maxime Beugnet 译者:徐雷( Frank Xu) 01 MongoDB4.0文档事务新特性介绍 MongoDB 4.0增加了对文档ACID事务的支持。 但等等......这是否意味着MongoDB直到现在才支持事务?不,实际上MongoDB已经提供了对单个文档事务的支持。 MongoDB 4.0跨文档、多语句、集合和多数据库扩展了事务保证。 如果没有任何形式的事务数据完整性保证,数据库还有什么用呢? 在我们深入阅读这篇博文之前,大家可以在此处找到所有代码并尝试文档ACID事务新特性。 我们将现有的单文档事务与MongoDB 4.0 ACID文档事务进行比较,看看如何利用Java来使用这一新特性。 04 MongoDB4.0文档ACID事务 MongoDB的文档ACID事务与传统关系数据库中已知的事务非常类似。 MongoDB事务是一组相关操作,必须以全有或全无的形式提交或全部回滚。

    3K20发布于 2018-12-27
  • 来自专栏架构师之路

    库多事务降低数据不一致概率

    二、补偿事务 补偿事务是一种在业务端实施业务逆向操作事务,来保证业务数据一致性的方式。 举个栗子,修改余额表事务为 int Do_AccountT(uid, money){ start transaction; //余额改变money这么 CURDtable 第一个事务执行200ms; 第二个事务执行120ms; 第三个事务执行80ms; 第一个事务执行1ms; 第二个事务执行1ms; 第三个事务执行1ms; 那在什么时候系统出现问题,会出现不一致呢? 回答:事务提交时会释放数据库的连接,第一种方案,第一个库事务提交,数据库连接就释放了,后置事务提交的方案,所有库的连接,要等到所有事务执行完才释放。 exec(); trx2.exec(); trx3.exec(); trx1.commit(); trx2.commit(); trx3.commit(); 这个小小的改动(改动成本极低),不能彻底解决库分布式事务数据一致性问题

    80550发布于 2018-03-01
  • 来自专栏凯哥Java

    springboot 学习mybatis+mysql读写分离(一写读)+事务

    springboot 学习mybatis+mysql读写分离(一写读)+事务 ?

    1.2K41发布于 2019-06-28
  • 来自专栏全栈程序员必看

    java 事务嵌套_Java事务以及嵌套事务

    最近遇到事务的处理,嵌套事务,自己研究,整理一下。 1 先看结论 1、在Java事务中,事务的嵌套,如果有事务成功,那么则都成功,否则都不会成功。 结论:并行事务不存在事务影响 4.2 场景:嵌套相同事务 a) 事务嵌套,在同一个事务中,没有对异常进行处理 @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest 结论:如果事务存在异常,并进行捕获处理,不会影响事务。 4.3 场景:嵌套不同事务 a)事务嵌套,在不同事务中,没有对异常进行处理 @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest public 结论:不同事务中,嵌套的事务,没有对异常进行处理,都不会执行成功。(其实在外部事务中出错,两个也是都不会插入成功数据。)

    3.7K10编辑于 2022-11-07
  • 来自专栏大数据架构

    SQL优化(六) MVCC PostgreSQL实现事务版本并发控制的精华

    隔离性允许事务行为独立或隔离于其它事务并发运行。 持久性(Durability)事务执行成功以后,该事务对数据库所作的更改是持久的保存在数据库之中,不会无缘无故的回滚。 PostgreSQL中的MVCC原理 事务ID 在PostgreSQL中,每个事务都有一个唯一的事务ID,被称为XID。 数据库中的事务ID递增。可通过txid_current()函数获取当前事务的ID。 隐藏版本标记字段 PostgreSQL中,对于每一行数据(称为一个tuple),包含有4个隐藏字段。 MVCC保证事物的隔离性 隔离性(Isolation)指一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 对于事务ID,PostgreSQL有三个事务ID有特殊意义: 0代表invalid事务号 1代表bootstrap事务号 2代表frozon事务

    2.7K50发布于 2018-06-11
  • 来自专栏全栈程序员必看

    java事务_Java 事务详解

    一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 二、Hibernate事务处理 (1)Hibernate事务处理 在Hibernate框架中,使用Transaction接口来维护了事务实现(JTA,JDBC)的抽象。 void rollback() 强制此事务回滚。 void setTimeout(int seconds) 它为由此实例开始的后续调用启动的任何事务设置事务超时。 Session,启动事务,执行所有与数据相关的工作,结束事务并关闭Session。 一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。

    1.9K20编辑于 2022-11-04
  • Java中非事务控制事务

    欢迎关注微信公众号:数据科学与艺术 作者WX:superhe199 标题: Java中非事务控制事务 本文探讨Java中非事务控制事务的实践和应用。 在本文中,我们将讨论如何使用Java编程语言实现这些非事务控制事务,并提供一些具体的案例分析。 首先,让我们明确什么是非事务控制事务。 与传统的数据库事务不同,非事务控制事务是指在没有数据库事务的支持下,通过编程技术模拟出一些类似事务的特性。在这种情况下,我们需要保证一系列操作的原子性、一致性、隔离性和持久性。 如果转账成功,提交事务,并关闭数据库连接。 下面是一个示例代码,展示了如何在Java中实现这个非事务控制事务的转账功能。 总结: 在本文中,我们介绍了在Java中实现非事务控制事务的方法,并通过一个简单的案例分析进行了说明。非事务控制事务是一种在没有数据库事务支持的情况下,通过编程技术模拟出类似事务的特性的方法。

    19810编辑于 2025-08-29
  • 来自专栏springBoot3.0

    事务

    所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。 《MySQL 技术内幕:InnoDB 存储引擎(第 2 版)》7.7 章这样写到: InnoDB 存储引擎提供了对 XA 事务的支持,并通过 XA 事务来支持分布式事务的实现。 分布式事务指的是允许多个独立的事务资源(transactional resources)参与到一个全局的事务中。事务资源通常是关系型数据库系统,但也可以是其他类型的资源。 全局事务要求在其中的所有参与的事务要么都提交,要么都回滚,这对于事务原有的 ACID 要求又有了提高。 解决幻读的方式主要有以下几种: 将事务隔离级别调整为 SERIALIZABLE 。 在可重复读的事务级别下,给事务操作的这张表添加表锁。

    76220编辑于 2023-03-06
  • 来自专栏Nodejs技术栈

    MongoDB 文档事务实践篇—教你如何在 Node.js 中应用

    MongoDB 在单文档操作中具有原子性,在文档操作中就不再具有此特性,通常需要借助事务来实现 ACID 特性。 事务 API 介绍 客户端对于事务的操作,都由 MongoDB Client Driver 实现提供相应的 API 接口。 MongoDB 3.6 之后的 Session 本质上也是一个上下文,在这个 Session 会话中多个请求共享一个上下文,为文档事务实现提供了基础。 事务函数 startTransaction() 开启一个新的事务,之后即可进行 CRUD 操作。 node index 事务状态:NO_TRANSACTION 事务状态:STARTING_TRANSACTION 事务状态:TRANSACTION_IN_PROGRESS 事务状态:TRANSACTION_COMMITTED

    3K30发布于 2020-02-26
  • 来自专栏基础知识文章

    事务

    1.事务处理 1.事务的概念 事务是针对数据库的一组操作, 它可以由-一条或多条SQL语句组成。 2.事务的基本操作 在默认情况下,用户执行的每一条SQL语句都会被当成单独的事务自动提交。 COMMIT; 如果不想提交当前事务,可以取消事务(即回滚)。 ROLLBACK; 事务的执行要么成功,要么就返回到事务开始前的状态,这就保证了同一事务操作的同步性和数据的完整性。 MySQL中的事务必须满足A、C、I、D这4个基本特性。 Atomicity: 原子性 一个事务必须被视为一个不可分割的最小工作单元,只有事务中所有的数据库操作都执行成功,才算整个事务执行成功。 Isolation: 隔离性 隔离性是指当一个事务在执行时,不会受到其他事务的影响。保证了未完成事务的所有操作与数据库系统的隔离,直到事务完成为止,才能看到事务的执行结果。 为了保证这些事务之间不受影响,对事务设置隔离级是十分必要的。

    72230编辑于 2022-05-05
  • 来自专栏全栈程序员必看

    Java 事务注解(注解式事务)

    spring中的@Transactional(rollbackFor = Exception.class)事务处理,当你的方法中抛出异常时,它会将 事务回滚,数据库中的数据将不会改变,也就是回到进入此方法前的状态 rollbackFor=Exception.class) 2 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class) 3 不需要事务管理的

    2K30编辑于 2022-07-29
  • 来自专栏CSDN 迁移文章

    Spring 事务事务传播机制

    事务的回顾 在 MySQL 学习阶段,已经了解到了事务是一组操作的集合,也就是把所有的操作作为一个整体,一起向数据库提交或者撤销操作,要么同时成功,要么同时失败 一个事务的操作流程包括了,开启事务,执行事务操作 ,提交事务或回滚事务,对于回滚事务来说,如果程序在执行过程中出现了错误,那么此时就需要执行回滚事务 2. 编程式事务 Spring 手动操作事务和 MySQL 操作事务类似,也是分为开启事务,提交事务,回滚事务等三个操作,需要用到 DataSourceTransactionManager (事务管理器)来进行上述事务的操作 事务传播机制 事务传播机制是指在多个事务方法相互调用时,定义事务如何在这些方法之间传播的规则,也就是延用调用方法的事务还是再重新开启一个新事务 Spring 事务的传播机制有以下七种 事务传播机制 描述 B 以非事务方式执行,如果 A 有事务就抛出异常 Propagation.NESTED 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行。

    64110编辑于 2024-12-20
领券