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

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

一致性:书中所说的一致性是指数据库要保证事务处理前后,数据从一种一致的状态转移到另外一种一致的状态。书中举的例子是银行转账前后总账是不应该变化的。但是我困惑的是,转账前后总账的一致性应该是在应用程序中控制的,数据库怎么能保证呢?最后我的理解是,数据库本身不保证你的数据的一致性,但是它有一些处理,只要你的应用程序写法没有问题,就可以保证这种一致性。比如说在应用程序中,在一个事务中,进行一个转账:

A = A + 30;

B = B - 30;

如何保证这种一致性呢?

首先要保证原子性,要么全部成功,要么全部失败,否则就会造成数据的不一致。其次要保证读一致性,在事务中查询的数据都是事务开始那个时间点的状态,不会受到其他事务(甚至是在当前事务开始之后已经提交的事务)的干扰,个人觉得如果能保证这两点,就能保证这个转账操作的一致性。

当然,数据库本身也能提供一些一致性的处理,如主外键约束,check约束等。举例如,插入数据的时候会看外键在对应的表中是否存在,否则将执行失败。

所以,综合起来理解的说,数据库提供的一致性措施,我理解的暂时有读一致性和各种约束。

这是我读书的时候的理解,后来我在网上查阅了更多的资料,发现我的理解只是局部的。(甚至此书作者的理解也是错误的,如2.1.5中作者将一致性简单的理解为check约束的作用)其实主外键约束,check约束是数据库完整性的范畴(为什么完整性不再ACID中?我理解的是因为它只是在数据库执行的那一个时间点上检查一下数据的check约束,跟整个事务无关,所以不再ACID的范畴吧。)。而读一致性只是数据库一致性的一个重要的方面。

关于数据库一致性的正确理解应该是,数据库本身不能完全保证数据的一致性,只能提供一定的机制(NoSQL应该是连这种机制都没有)来保证一致性,如Oracle的语句级读一致性机制,事务的隔离级别(可以防止脏读,不可重复读,幻读等),事务级读一致性,回滚段机制等,都是保证读一致性的重要机制。

隔离性:

至于隔离性,书上说“不同的事务操作相同的数据时候,每个事务都有自己独立的工作空间”。我理解的是,不同的时候来操作相同的数据的时候,只能有一个事务在独占操作,另外的事务只能等待独占的那个事务执行commit或者rollback。后来我想,作者所谓的"操作"应该是包含了“更新”和“读取”,一个事务的更新操作在未提交之前不会被另外一个事务读取。这样就合乎情理了。

总结,隔离性就是说每个事务是相互隔离的,在没有执行完成(commit或者rollback)之前对外是不可知的。

时间: 2024-12-15 15:38:52

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

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

NoSQL产生的原因: 关系型数据库不擅长的操作,是NoSQL应运而生的原因: 大量的数据写入操作书上写的是"大量数据的写入操作",我理解的应该是"大量的数据写入操作",因为大量的数据写入操作才会引起并发,并发和锁是关系型数据库的瓶颈,NoSQL将表拆分到不同的节点上,可以将写入操作分发到各个节点上.为何关系型数据库无法解决大量的数据写入操作?在数据读入方面,关系型数据库可以通过增加节点,主从复制,来提高高并发的时候的压力.但是在写入方面,为了保证每个节点上数据的一

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

键值存储数据库临时性:如Memcached.临时性的键值数据库把数据存储在内存中,在两种情况下会造成上数据的丢失,一是断电,而是数据内容超出内存大小.这种处理的好处是非常快.永久型:如Tokyo Tyrant .Flare和ROMA两者兼有型:Redis.Redis首先把数据存在内存中,然后在满足特定条件(默认是15分钟1次以上,5分钟10个以上,1一分钟10000个以上的键发生变化)的时候,将数据同步到硬盘,这样既可以保证数据的处理速度,又可以保证数据的永久性.我的疑惑是:按照这种特定条件的话

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

与关系型数据库相比,MongoDB的优点: 转载自  http://blog.sina.com.cn/s/blog_966e430001019s8v.html①弱一致性(最终一致),更能保证用户的访问速度:举例来说,在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集,这样可以保证得到“当前”情况下的精确值.这在某些情况下,例 如通过ATM查看账户信息的时候很重要,但对于Wordnik来说,数据是不断更新和增长的,这种“精确”的保证几乎没有任何意义,反而会产生很大的延 迟.他们需要的是一

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

早在 SQL Server 2005里面就有了这种 完整的商业智能平台了,那时候Nosql什么的都还停留在概念性的提出阶段,发展至2009年才一下子蹦了出来变得众所周知了.当然这个要扯就扯远了,咱们还是直接来介绍一下这篇文章的重点传统关系型数据库在当时面临的一些问题. 关系型数据库的局限 SQL Server 2005 –完整的商业智能平台 关系型数据库的局限: 随着信息技术的飞速发展,数据处理不仅在数量上要求越来越大,而且在质量上也要求越来越高,数据库所管理的数据已经发生了根本的变化.这一变化

详细总结 Hive VS 传统关系型数据库

本文思路,看图说话,一张图,清晰总结二者区别 下面对图中的各条做详细总结 1.查询语言 不做赘述 2.数据存储位置 不做赘述 3.数据格式 Hive:Hive 中没有定义专门的数据格式,数据格式可以由用户指定,用户定义数据格式需要指定三个属性:列分隔符(通常为空格."\t"."\x001″).行分隔符("\n")以及读取文件数据的方法(Hive 中默认有三个文件格式 TextFile,SequenceFile 以及 RCFile). 由于在加载数据的过程中

跨越数据库发展鸿沟,谈分布式数据库技术趋势

金融行业架构转型需求随着移动化与互联网化的不断发展,我国金融行业的商业模式与技术体系已经逐渐走上了与西方世界完全不同的道路.众所周知,欧美国家的移动化普及率远远不如我国,同时人口基数也有着数量级的不同,这就使得国内外金融行业所面临的业务类型.数据量.并发量都存在巨大的差异,导致对整个IT基础设施的需求截然不同. 在最近的一两年中,国内部分科技领先的银行已经率先对微服务与分布式技术进行了探索,一些新建的互联网金融类业务也已经开始尝试使用微服务架构.分布式技术.DevOps框架进行应用的开发与维护.

关系型数据库和NoSQL数据库

关系型数据库和NoSQL数据库 什么是NoSQL 大家有没有听说过 “NoSQL”呢?近年,这个词极受关注.看到“NoSQL”这个词,大家可能会误以为是“No!SQL”的缩写,并深感愤怒:“SQL怎么会没有必要了 呢?”但实际上,它是“Not Only SQL”的缩写.它的意义是:适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存 储. 为弥补关系型数据库的不足,各种各样的NoSQL数据库应运而生. 为了更好地了解本书所介绍的No

nosql的介绍以及和关系型数据库的区别

一直对非关系型数据库和关系型数据库的了解感觉不太深入,在网上收集了一些关于sql和nosql的区别和优缺点分享给大家. Nosql介绍 Nosql的全称是Not Only Sql,这个概念早起就有人提出,在09年的时候比较火.Nosql指的是非关系型数据库,而我们常用的都是关系型数据库.就像我们常用的mysql,sqlserver一样,这些数据库一般用来存储重要信息,应对普通的业务是没有问题的.但是,随着互联网的高速发展,传统的关系型数据库在应付超大规模,超大流量以及高并发的时候力不从心.而就在

非关系型数据库(NoSQL)——Redis安装及部署详解

在现在的互联网大潮中,NoSQL可谓是家喻户晓,Redis作为NoSQL中及其重要的一员,使我们走向架构道路的一条必经之路.作为运维工程师来说,是必须要掌握的! 既然提到了Redis数据库是非关系型数据,并且需要掌握Redis数据库.那么关于关系型数据库与非关系型数据库的基本概念是必须要了解的. 一.关系型数据库与非关系型数据库的基本概念: 数据库按照其结构可以分为关系型数据库与其他数据库,而这些其他数据库,我们统称为非关系型数据库. 1.关系型数据库 关系型数据库是一个结构化的数据库,创建在关