1

请问人们常说的数据库的 ACID 究竟是什么意思?

 7 months ago
source link: https://www.v2ex.com/t/979186
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  程序员

请问人们常说的数据库的 ACID 究竟是什么意思?

  xieyuheng · xieyuheng · 16 小时 42 分钟前 · 1404 次点击

课本上经常提到 ACID 的概念,人们也经常把 ACID 挂在嘴边。

但是课本上的介绍通常很抽象。ACID 具体是什么意思?

对于 A 、C 、I 、D 这四个属性中的每一个,具体的正面例子和反面离子分别是什么?

15 条回复    2023-10-06 19:06:33 +08:00
Salomea

Salomea      16 小时 39 分钟前   ❤️ 1

或许百度一下比在这里更明了🐶
SadBox

SadBox      16 小时 30 分钟前

原子性 持久性 隔离性 还有个啥来着的,记不太清了
logAn7

logAn7      16 小时 26 分钟前 via Android

原子性( Atomicity ):事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;一致性( Consistency ):执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的;隔离性( Isolation ):并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;持久性( Durability ):一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。🌈 这里要额外补充一点:只有保证了事务的持久性、原子性、隔离性之后,一致性才能得到保障。也就是说 A 、I 、D 是手段,C 是目的!
------
著作权归 JavaGuide(javaguide.cn)所有
基于 MIT 协议
原文链接: https://javaguide.cn/database/mysql/mysql-questions-01.html
xieyuheng

xieyuheng      16 小时 22 分钟前

可悲就可悲在广告语写进了教科书,并且人民不觉得那是 markting 了,而是觉得那是 “知识”。
xieyuheng

xieyuheng      16 小时 20 分钟前   ❤️ 1

@logAn7 还是抽象的描述。如果有例子就只有一个银行的例子。

可知道银行用的是 appending only 账本?
跟“两次修改要在同一个事务中”没有任何关系。
xieyuheng

xieyuheng      16 小时 17 分钟前

所谓持久性,就是数据库的定义本身吧,我写 App 的时候要用一个数据库,就是为了把数据持久化。

A 、C 、I 既然都和事务有关,可不可以说 ACID 就是,这个数据库要支持事务这个功能?

那么 couchDB 之类的,是不是就不算 ACID 的数据库?
PTLin

PTLin      15 小时 54 分钟前

个人认为 MySQL 里,Atomicity 是由 redo log 以及 undo log 实现的:redo log 和 Mini Transaction 可以保证执行一条语句再恢复后数据库整体的状态不会是不一致的,undo log 可以保证 redo log 恢复后把未提交的事务重新回滚。

Consistency 是数据库对显示世界建模的正确性的概念,很多时候需要再代码段实现一致性。

Isolation 是由 undo log 以及锁,间隔锁,MVCC 实现的,锁做到了基础的隔离实现。undo log 为基础的 MVCC 的 readview 保证了实现隔离性下的并发性。

Durability 是由 redo log 以及 undo log 实现的,发生故障后可以进行恢复。
xieyuheng

xieyuheng      14 小时 10 分钟前

@FYFX 原来如此!
Euthpic

Euthpic      13 小时 40 分钟前 via Android

@FYFX c 是目的,aid 是手段,我之前的观点也是这样
dangyuluo

dangyuluo      13 小时 31 分钟前   ❤️ 1

硬凑的几个字母而已。。英语里有个现象(德国人尤其擅长)叫 backronym ,先找一个听起来好听/好记的 4~6 字母单词,再给每个字母找对应的含义。
斯坦福有个 CARS 搞自动驾驶的研究所,全称 Center for Automotive Research at Stanford
qaqLjj

qaqLjj      12 小时 43 分钟前 via Android

数据库事务的 acid ,不是数据库的 acid
me1onsoda

me1onsoda      12 小时 10 分钟前

@xieyuheng 你的意思是在 append only 这个模式下,不需要事务也能保证数据正常?
xenme

xenme      11 小时 35 分钟前 via iPhone

有没有考虑过 append only 的落盘机制?即使 append only 有些也会先 buffer 然后才落盘,成功落盘前也不一定 durable 。另外就是你举例的银行,append only 看起来很简单,但是如果有复杂的事务关联逻辑有前后顺序的时候锁等情况,append only 的数据就没那么简单了

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK