当前位置: 代码迷 >> 高性能数据库开发 >> 关于数据库的原子性和原子操作的概念有关问题
  详细解决方案

关于数据库的原子性和原子操作的概念有关问题

热度:2391   发布时间:2013-02-26 00:00:00.0
关于数据库的原子性和原子操作的概念问题

我在学习操作系统PV操作的时候知道PV操作都是原子操作,也就是说这些操作是不能被打断的,可以通过暂时关闭中断来实现。

今天我在看数据库事务处理时,它提到原子性。定义为:要么全部执行完,要么什么都不执行。

我的问题来了,我一直以为原子操作和原子性这两个概念是一样的,原子操作具有的就是原子性,具有原子性的操作是原子操作。那么事务是可以并发执行的,也就是说一个事务中的指令在等待IO(打个比方)时,另一个事务的指令可以使用CPU时间。这也就是说第一个事务其实是被打断了的,那么这就和原子操作的定义不符合了,但如果两个事务的指令都能顺利执行完,这是符合原子性定义的。

我的理解就是这样的,不知坛子里的专家有什么见解么?如果有不对的地方烦请指正一下,毕竟学习的时候基本概念是很重要的。

------解决方案--------------------------------------------------------
操作系统的原子操作,粒度更细,并且不具有持久性,不能存储到事务日志当中加以恢复。
而事务处理中的原子性,粒度要大得多。一个长事务,可以持续几天才完成。

------解决方案--------------------------------------------------------
数据库的操作不是原子的,但是结果是原子的。要么成功,要么失败。不会做了一半。。。

这个保证是依靠数据库的实现来保证的。以sqlite为例,它是通过journal文件来保证结果的原子性的。
  相关解决方案