在看着章节的时候,我简单的回顾了一下关系型数据库的事务处理的ACID原则,其中原子性和持久性比较好理解。由于以前没有深入去研究。关于一致性和隔离性上我产生了疑问,在整理后分析如下:

 
一致性:书中所说的一致性是指数据库要保证事务处理前后,数据从一种一致的状态转移到另外一种一致的状态。书中举的例子是银行转账前后总账是不应该变化的。但是我困惑的是,转账前后总账的一致性应该是在应用程序中控制的,数据库怎么能保证呢?最后我的理解是,数据库本身不保证你的数据的一致性,但是它有一些处理,只要你的应用程序写法没有问题,就可以保证这种一致性。比如说在应用程序中,在一个事务中,进行一个转账:
A = A + 30;
B = B - 30;
如何保证这种一致性呢?
首先要保证原子性,要么全部成功,要么全部失败,否则就会造成数据的不一致。其次要保证读一致性,在事务中查询的数据都是事务开始那个时间点的状态,不会受到其他事务(甚至是在当前事务开始之后已经提交的事务)的干扰,个人觉得如果能保证这两点,就能保证这个转账操作的一致性。
当然,数据库本身也能提供一些一致性的处理,如主外键约束,check约束等。举例如,插入数据的时候会看外键在对应的表中是否存在,否则将执行失败。
所以,综合起来理解的说,数据库提供的一致性措施,我理解的暂时有读一致性和各种约束。
 
这是我读书的时候的理解,后来我在网上查阅了更多的资料,发现我的理解只是局部的。(甚至此书作者的理解也是错误的,如2.1.5中作者将一致性简单的理解为check约束的作用)其实主外键约束,check约束是数据库完整性的范畴(为什么完整性不再ACID中?我理解的是因为它只是在数据库执行的那一个时间点上检查一下数据的check约束,跟整个事务无关,所以不再ACID的范畴吧。)。而读一致性只是数据库一致性的一个重要的方面。
 
关于数据库一致性的正确理解应该是,数据库本身不能完全保证数据的一致性,只能提供一定的机制(NoSQL应该是连这种机制都没有)来保证一致性,如Oracle的语句级读一致性机制,事务的隔离级别(可以防止脏读,不可重复读,幻读等),事务级读一致性,回滚段机制等,都是保证读一致性的重要机制。
 
 
隔离性:
至于隔离性,书上说“不同的事务操作相同的数据时候,每个事务都有自己独立的工作空间”。我理解的是,不同的时候来操作相同的数据的时候,只能有一个事务在独占操作,另外的事务只能等待独占的那个事务执行commit或者rollback。后来我想,作者所谓的"操作"应该是包含了“更新”和“读取”,一个事务的更新操作在未提交之前不会被另外一个事务读取。这样就合乎情理了。
总结,隔离性就是说每个事务是相互隔离的,在没有执行完成(commit或者rollback)之前对外是不可知的。

NoSQL数据库技术实战-第1章 NoSQL的数据一致性 传统关系型数据库的ACID的更多相关文章

  1. NoSQL数据库技术实战-第1章 NoSQL与大数据简介 NoSQL产生的原因

    NoSQL产生的原因: 关系型数据库不擅长的操作,是NoSQL应运而生的原因: 大量的数据写入操作书上写的是“大量数据的写入操作“,我理解的应该是“大量的数据写入操作”,因为大量的数据写入操作才会引起 ...

  2. NoSQL数据库技术实战-第1章 NoSQL与大数据简介 NoSQL数据库的类型

    键值存储数据库临时性:如Memcached.临时性的键值数据库把数据存储在内存中,在两种情况下会造成上数据的丢失,一是断电,而是数据内容超出内存大小.这种处理的好处是非常快.永久型:如Tokyo Ty ...

  3. MongoDB 与传统关系型数据库mysql比较

    与关系型数据库相比,MongoDB的优点: 转载自  http://blog.sina.com.cn/s/blog_966e430001019s8v.html①弱一致性(最终一致),更能保证用户的访问 ...

  4. BI-学习之 商业智能平台的引入(传统关系型数据库的问题)

    早在 SQL Server 2005里面就有了这种 完整的商业智能平台了,那时候Nosql什么的都还停留在概念性的提出阶段,发展至2009年才一下子蹦了出来变得众所周知了.当然这个要扯就扯远了,咱们还 ...

  5. Hbase与传统关系型数据库对比

    在说HBase之前,我想再唠叨几句.做互联网应用的哥们儿应该都清楚,互联网应用这东西,你没办法预测你的系统什么时候会被多少人访问,你面临的用户到底有多少,说不定今天你的用户还少,明天系统用户就变多了, ...

  6. 具体总结 Hive VS 传统关系型数据库

    本文思路,看图说话,一张图,清晰总结二者差别 以下对图中的各条做具体总结 1.查询语言 不做赘述 2.数据存储位置 不做赘述 3.数据格式 Hive:Hive 中未定义专门的数据格式,数据格式能够由用 ...

  7. NoSQL数据库技术特性解析之文档数据库

    现今云计算的从业人员对NoSQL一词并不感到陌生,虽然很多技术人员都长期从事关系数据库的工作,但现在他们对NoSQL技术充满期待.对于企业来说,从关系型数据库到NoSQL数据库转变绝对是个需要深思熟虑 ...

  8. 转 开启“大数据”时代--大数据挑战与NoSQL数据库技术 iteye

    一直觉得“大数据”这个名词离我很近,却又很遥远.最近不管是微博上,还是各种技术博客.论坛,碎碎念大数据概念的不胜枚举. 在我的理解里,从概念理解上来讲,大数据的目的在于更好的数据分析,否则如此大数据的 ...

  9. 数据库技术丛书:SQL Server 2016 从入门到实战(视频教学版) PDF

    1:书籍下载方式: SQL Server2016从入门到实战 PDF 下载  链接:https://pan.baidu.com/s/1sWZjdud4RosPyg8sUBaqsQ 密码:8z7w 学习 ...

随机推荐

  1. Element-UI 框架 el-scrollbar 组件

    Element-UI 框架 el-scrollbar 组件:https://juejin.im/post/5c83d5ac5188257e1c4dc9e7

  2. Nginx 配置文件解释及简单配置

    Nginx配置文件大致分为以下几个块 1.全局块:配置影响nginx全局的指令.一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker pr ...

  3. 消息中间件RabbitMq的代码使用案例

    消费者: ---------------------- 构造初始化: public RabbitMqReceiver(String host, int port, String username, S ...

  4. nginx 增加认证

    1.检查工具是否安装,如果未安装则使用yum安装 #htpasswd 有以上输出表示已经安装,如果没有按装,使用如下命令安装: #yum -y install httpd-tools 2.htpass ...

  5. windows环境jar包部署到linux服务器,一键操作

    背景: windows系统下生成的jar包通过FTP上传到linux服务器,然后通过XShell进行jar包的发布,这样反复了几个月后,开发阶段需要频繁更新包的部署.个人觉得很繁琐,想一键式把这个工作 ...

  6. 「java.util.concurrent并发包」之 CountDownLatch

    一 CountDownLatch是什么 CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier.Semaphore.ConcurrentHas ...

  7. linux下vi编辑器常用命令

    最近折腾云主机centOS,不得不接触到各种命令,特别是vi编辑器. 时常悔恨当时没好好听金老伯的linux课,导致现在操作命令用的十分生疏,甚至跳转行首行尾都要查一查才知道. 所以〒▽〒有了下面这篇 ...

  8. 并不对劲的复健训练-p3674

    题目大意 给出序列$ a_1,...,a_n $ ( $ n\leq10^5,a\leq 10^5 $ ),有\(m\) ( \(m\leq 10^5\))个以下三类询问: (1)给出\(l,r,k\ ...

  9. C# HttpWebRequest向远程地址Post文件

    HttpWebRequest向远程地址Post文件 /// <summary> /// 上传文件到远程服务器 /// </summary> /// <param name ...

  10. Scala学习九——文件和正则表达式

    一.本章要点 Source.fromFile(...).getLines.toArray输出文件的所有行; Source.fromFile(...).mkString以字符串形式输出文件内容; 将字符 ...