首页 > 编程知识 正文

数据库acid的含义,数据库中的ACID

时间:2023-05-03 20:22:51 阅读:183595 作者:2040

基本含义

在数据库系统中,事务所提供的安全保证,使用ACID来描述,分别代表原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)。

但是在今天,ACID几乎成为数据库厂商的一个营销术语,当一个系统声称自己符合ACID时,实际上能期待的是什么保证,并不是很清楚。

原子性

ACID的原子性,描述的是当客户想进行多次的写入,但是在一些写操作处理完成后,出现了故障的情况。

例如当一组写操作被分组到一个原子事务中,当部分写操作完成,但是部分写操作还未进行时,出现了故障,比如进程崩溃、网络连接中断,磁盘没有空间等,由于这些错误,导致后续的写操作无法完成,则该事务不能提交,事务将被中止,而且数据库必须丢弃或者撤销该事务之前已经完成的任何写入操作。

如果事务被中止,则应用程序可以确定其没有改变任何东西,应用程序可以安全地重新进行事务操作。

ACID的原子性定义的特性是:能够在错误时中止事务,丢弃该事务进行的所有的写入变更的能力。

一致性

ACID中一致性的概念是,对数据的一组特定的陈述必须始终成立。

比如,在会计系统中,所有账户上的整体的借贷必须互相可抵。

如果一个事务开始于一个满足这些不变量的有效数据库,且在事务处理期间的任何写入操作都保持这种有效性,则可以确定,不变量总是满足的。

一致性的概念取决于应用程序对于不变量的定义。应用程序负责正确定义其事务,并保持一致性,这不是数据库负责的范畴。

原子性、隔离性和持久性是数据库的属性,但是一致性在ACID意义上,是应用程序的属性。

隔离性

大多数数据库都会被多个客户端访问,如果多个客户端访问数据库中相同的记录数据,则可能会遇到并发的问题。

ACID的隔离性意味着,同时执行的事务是互相隔离的,互相不能冒犯。传统的教科书将隔离性形式化为可序列化,意味着每个事务都可以假装其是唯一在整个数据库上运行的事务,数据库确保当多个事务已经提交时,结果与多个事务按照顺序提交是一样的。尽管实际上它们可能是并发运行的。

但是在实际实现时,越高的隔离性会带来越大的性能损耗,因此一般的数据库会提供不同级别的隔离性,以满足不同性能需求。

持久性

持久性表示的是一个承诺。即一旦事务已经成功完成,则即使发生硬件故障,或者数据库崩溃,写入的任何数据也不会丢失。

在单节点数据库中,持久性意味着数据已经被写入非易失性存储设备,通常还包括预写日志或者类似的文件。

在分布式数据库中,持久性意味着数据已经成功复制到一些节点。

完美的持久性是不存在的,如果所有的硬件和备份都被销毁,则没有任何数据库能够拯救数据。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。