Atitit 数据库事务实现原理

 

1.1. 自己在程序中实现事务操作。

如果只是需要事务的话,你自己给mongo操作加上事务功能就可以啦。。数据库事务只不过是他自己实现了而已。。如果数据库不支持事务,就要你在代码里面实现事务就可以了。。

最简单方便的就是使用日志方式来做事务就可以了。。

比如插入俩个数据。每执行一个sql,就生成一个undo日志即可。。

Undo日志表如下字段(事务id,表格名称,操作【insert,update,delete】,原记录id,新记录id)

 

如果后面的sql失败了。那么根据undo日志,撤销掉前面执行的sql数据即可。

主要流程如下。根据事务id,得到前几个sql语句新增的记录id,然后删除这几个id的数据即可。。

 

如果提交成功,那么可以删除掉此事务id对应的undo日志即可。。

 

1.2. 事务有两种方式达到这样的目的: Shadow copies/pages(影像拷贝/影像页面): 每ransaction log (事务日志)

Shadow copies/pages(影像拷贝/影像页面): 每个事务拷贝一份自己的数据库(或者是数据库的一部分),在这份拷贝上操作。出错了,就删除这份拷贝。成功后,使用文件系统的功能 做一下文件交换,替换掉旧的数据。

Transaction log (事务日志):Transaction log是这样一块存储区域–在事务将数据写到磁盘之前先将信息写到Transaction log文件。这样,如果服务发生崩溃、事务被取消;数据库清楚如果根据日志删除数据,或者继续完成未完成的操作。

 

1.3. innodb通过undo log和redo log来实现。

事务中,每当执行一条SQL语句对数据产生了影响,就会记录下来与之相反的操作到undo log(撤销日志)中,例如,更新会记录之前的状态,删除会形成insert,添加会形成delete,一旦事务被回滚,则执行undo log中记录的操作,来完成恢复到之前的状态。这里是个 逻辑恢复哦!
同时,每当执行一条事务中的SQL,会将操作记录到redo log中,此时事务一旦被提交,就将该redolog中的操作,持久化到磁盘上,数据就持久的记录下来了(ACID的D)。

PS:还有,undolog才是原子性的关键

2. 隔离级别的概念

 

关系型数据库工作原理-事务管理(二) - 数据库其他综合 - 红黑联盟.html

 

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 )

汉字名:艾提拉(艾龙),   EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

Atiend

 

Atitit 数据库事务实现原理的更多相关文章

  1. Atitit.数据库事务隔离级别 attilax 总结

    Atitit.数据库事务隔离级别 1. 事务隔离级别的作用 1 2. 在的隔离级别 2 3. 常见数据库的默认管理级别 3 1. 事务隔离级别的作用 较低的隔离级别可以增强许多用户同时访问数据的能力, ...

  2. mysql数据库事务隔离原理

    今天在学习JDBC的时候看到了关于MySQL的事务的隔离级别的问题,感觉内容挺高级的,所以记录一篇文章,以备后面使用. 数据库隔离级别有四种,应用<高性能mysql>一书中的说明: 然后说 ...

  3. Atitit.数据库存储引擎的原理与attilax 总结

    Atitit.数据库存储引擎的原理与attilax 总结 1. 存储引擎是什么1 2. 其它数据库系统(包括大多数商业选择)仅支持一种类型的数据存储2 3. 表的存储有三个文件:结构+数据+索引2 4 ...

  4. Atitit.数据库存储引擎的原理与attilax 总结

    Atitit.数据库存储引擎的原理与attilax 总结 1. 存储引擎是什么1 2. 其它数据库系统(包括大多数商业选择)仅支持一种类型的数据存储2 3. 表的存储有三个文件:结构+数据+索引2 4 ...

  5. Atitit.数据库表的物理存储结构原理与架构设计与实践

    Atitit.数据库表的物理存储结构原理与架构设计与实践 1. Oracle和DB2数据库的存储模型如图: 1 1.1. 2. 表数据在块中的存储以及RowId信息3 2. 数据表的物理存储结构 自然 ...

  6. Mysql数据库事务的隔离级别和锁的实现原理分析

    Mysql数据库事务的隔离级别和锁的实现原理分析 找到大神了:http://blog.csdn.net/tangkund3218/article/details/51753243 InnoDB使用MV ...

  7. 巨杉数据库SequoiaDB】巨杉Tech | SequoiaDB 分布式事务实现原理简介

    1 分布式事务背景 随着分布式数据库技术的发展越来越成熟,业内对于分布式数据库的要求也由曾经只用满足解决海量数据的存储和读取这类边缘业务向核心交易业务转变.分布式数据库如果要满足核心账务类交易需求,则 ...

  8. Atitit  数据库的事件机制--触发器与定时任务attilax总结

    Atitit  数据库的事件机制--触发器与定时任务attilax总结 1.1. 事件机制的图谱1 2. 触发器的类型2 3. 实现原理 After触发器 Vs Instead Of触发器2 3.1. ...

  9. Atitit数据库层次架构表与知识点 attilax 总结

    Atitit数据库层次架构表与知识点 attilax 总结 第一阶段,大概理论(三五天 数据库的类型,网状,层次,树形数据库,kv数据库.Oodb Er模型   sql 并发控制与lock  Acid ...

随机推荐

  1. react通过自己的jsx语法将两者放在一起通过虚拟dom来渲染

    目前较为流行的react确实有很多优点,例如虚拟dom,单向数据流状态机的思想.还有可复用组件化的思想等等.加上搭配jsx语法和es6,适应之后开发确实快捷很多,值得大家去一试.其实组件化的思想一直在 ...

  2. C# 计算字符串在控制台中的显示长度

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  3. Oracle 服务手动启动关闭

    在windows7中安装完Oracle11g之后会出现一下七种服务:可通过运行->services.msc查看. 其中各个服务名称中的ORCL或orcl为SID即System IDentifie ...

  4. Node.js ORM 框架 sequelize 实践

    最近在做团队的一个内部系统,这次使用的nodejs web框架是团队统一的hapi.js,而数据库依然是mysql,ORM 框架选用有着6000+ stars 的 sequelize.js,hapi- ...

  5. hdu acm 1166 敌兵布阵 (线段树)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. Android开机启动Activity或者Service方法

    本文出自 “Bill_Hoo专栏” 博客,请务必保留此出处http://billhoo.blog.51cto.com/2337751/761230 这段时间在做Android的基础开发,现在有一需求是 ...

  7. ARCGIS自定义下拉列表

    1  创建一个geodatabase数据库 2 点击属性--->Domain-->>输入名称,在下面的属性设置中选择coded value 3  在下面的列表中输入下拉列表中可供选择 ...

  8. php图片处理类库 Image

    image 下载地址 https://github.com/Intervention/image.git 下载之后解压 执行composer update 生成 autoload.php文件   该类 ...

  9. 【转】【Linux】 临界区,互斥量,信号量,事件的区别

    原文地址:http://blog.itpub.net/10697500/viewspace-612045/ Linux中 四种进程或线程同步互斥的控制方法1.临界区:通过对多线程的串行化来访问公共资源 ...

  10. Autolayout(VFL)

    Autolayout(VFL) 1.NSLayoutConstraint + (NSArray *)constraintsWithVisualFormat:(NSString *)format opt ...