在看着章节的时候,我简单的回顾了一下关系型数据库的事务处理的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. mysq的慢查询日志

    MySQL 慢查询日志是排查问题 SQL 语句,以及检查当前 MySQL 性能的一个重要功能. 查看是否开启慢查询功能: mysql> show variables like 'slow_que ...

  2. js 返回一个数组里面0出现的次数

    var num = new Array(10000).fill('').map((item,index) => (index + 1)). 在点号后面补充代码,让num是这个数组中0出现的次数, ...

  3. 大数据备忘录———将数据从oracle导入impala中

    上周遇到了将数据从oracle导入到impala的问题,这个项目耽误了我近一周的时间,虽然是种种原因导致的,但是还是做个总结. 需求首先是跑数据,跑数据这个就不叙述,用的是公司的平台. 讲讲耽误我最久 ...

  4. Scala 内部类及外部类

    转自:https://blog.csdn.net/yyywyr/article/details/50193767 Scala内部类是从属于外部类对象的. 1.代码如下 package com.yy.o ...

  5. 对pdf 表单域 或文本框的操作---动态填充PDF 文件内容

    前提:需要pdf模板:并且模板内容以pdf 文本框的形式填写 package com.test;import java.io.File;import java.io.FileOutputStream; ...

  6. 洛谷P2622 关灯问题II (二进制枚举+bfs

    题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯——按下了第i个按钮,对于所有的灯都有一个效果.按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]为1,那么当这盏灯开了的时 ...

  7. 201803-3 URL映射

    问题描述 URL 映射是诸如 Django.Ruby on Rails 等网页框架 (web frameworks) 的一个重要组件.对于从浏览器发来的 HTTP 请求,URL 映射模块会解析请求中的 ...

  8. 搞懂Dubbo SPI可拓展机制

    前言 阅读本文需要具备java spi的基础,本文不讲java spi,please google it. 一.Dubbo SPI 简介 SPI(Service Provider Interface) ...

  9. HashMap的四种遍历方式

    package com.xt.map; import java.util.HashMap; import java.util.Iterator; import java.util.Map; impor ...

  10. winform messageBox.Show()

    MessageBox.Show(" 5 个参数...... ",     " 亮仔提示",     MessageBoxButtons.OKCancel,    ...