ACID模型[Mysql InnoDB系列]
2019-08-08 本文已影响0人
judeshawn
ACID模型是数据库设计准则的集合,这些准则强调了对于业务数据和关键任务应用非常重要的可靠性方面。Mysql具有像InnoDB存储引擎这样的非常贴合ACID模型的组件,以使数据不会损坏,而且在遭遇诸如软件崩溃或硬件失灵等异常情况下也不可能胡乱返回结果。当你需要ACID兼容的功能时,你不再需要做大量无用功来做一致性检查和崩溃恢复机制。如果有额外的软件防护、终极可靠的硬件、或者是应用可以容忍少量数据的丢失或不一致,那么你也可以调整Mysql配置来牺牲部分ACID可靠性以获取更快的性能或吞吐。
下面这一部分讨论例如像InnoDB存储引擎这样的Mysql组件是如何与ACID模型的各个方面相互契合的
- A:atomicity 原子性
- C:consistency 一致性
- I:isolation 隔离性
- D:durability 持久性
原子性
ACID模型的原子性方面主要是指InnnoDB事务(transactions).相关的Mysql功能包括:
- 自动提交(autocommit)设置
- COMMIT 提交
- ROLLBACK 回滚
- INFORMATION_SCHEMA数据库表里的运营数据
一致性
ACID模型的一致性方面主要是指内部InnoDB进程保护数据不受实例崩溃的影响。相关的Mysql功能包括:
- InnoDB doublewrite buffer 双写缓存
- InnoDB 故障恢复
隔离性
ACID模型的隔离性方面主要指InnoDB事务,尤其是作用于每个事务的隔离级别。相关的Mysql功能包括:
- Autocommit自动提交配置
- SET ISOLATION LEVEL设置隔离级别的语句
- InnoDB 锁的底层细节。在性能优化的时候,可以在INFORMATION_SCHEMA数据库表中查看这些细节。
持久性
ACID模型的持久性方面涉及Mysql软件组件和具体的硬件配置之间的交互。由于依赖于CPU、网络和存储的性能,硬件环境可能各不相同,因此这方面是最难提供具体的指导方针的(指导方针恐怕是购买‘新硬件’之类的)。相关Mysql功能包括:
- InnoDB double buffer,使用innodb_doublewrite配置选项来开启和关闭
- 配置innodb_flush_log_at_trx_commit选项(提交时马上刷日志)
- 配置sync_binlog选项
- 配置innodb_file_per_table选项(每张innodb表使用单独数据文件)
- 在存储设备中写Buffer,例如磁盘、SSD、或者RAID阵列
- 存储设备中使用带备用电池的缓存
- UPS保护所有服务器和存储设备免受突然断电导致的数据丢失
- 备份策略,例如备份频率和类型,以及备份保留时间
- 对于分布式的或托管数据应用,数据中心Mysql服务器硬件的地理位置,以及服务器之间的网络连接的具体特征。