MySQL InnoDB ACID模型

ACID模型是数据库设计的基本原则,用来保证商业数据以及重要应用服务的可靠性。MySQL InnoDB存储引擎以ACID模型为基础,实现了数据的高效、安全存储,在一些意外场景,比如软件崩溃,硬件故障,也不会导致数据损坏。如果应用依赖ACID,使用InnoDB存储引擎,就不必再考虑数据一致性检查和故障恢复,因这这些机制Innodb已经完全具备,不必再重复造轮子。

如果系统有额外的软件或者硬件可靠性保障,或者应用允许一些数据的丢失或者不一致,可以通过调整MySQL ACID相关的一些配置,来获取更高的性能和吞吐量。

1. ACID

  • A,atomicity,原子性
  • C,consistency,一致性
  • I,isolation,隔离性
  • D,durability,持久性

2. Atomicity 原子性

原子性主要涉及到InnoDB的事务,相关的特性包括:

  1. autocommit自动提交设置
  2. commit语句
  3. rollback语句

3. Consistency 一致性

一致性主要反映进程崩溃恢复场景下,InnoDB内部处理数据的过程,相关的特性包括:

  1. InnoDB doublewrite buffer
  2. InnoDB crash recovery

4. Isolation 隔离性

隔离性主要涉及InnoDB的事务,尤其是事务的隔离级别。相关的特性包括:

  1. autocommit自动提交设置
  2. 设置事务隔离级别语句
  3. InnoDB底层锁的实现细节

5. Durability 持久性

持久性主要涉及硬件的设置,依赖硬件如CPU,网络,存储设备的能力。关于持久性的一些原则相对其他来说可能是更加复杂的,因为随着硬件的发展更新,有些原则可能不再适用。MySQL中与持久性相关的特性包括:

  1. InnoDB doublewrite buffer,由参数innodb_doublewrite决定是否打开。
  2. innodb_flush_log_at_trx_commit,redo log刷盘策略。
  3. sync_binlog,binlog刷盘策略。
  4. innodb_file_per_table,是否使用独立表空间。
  5. 存储设备的写缓存,比如SSD,RAID卡阵列。
  6. 存储设备的电容缓存。
  7. 运行MySQL的操作系统,是否支持fsync系统调用。
  8. 运行MySQL的机器是否装备不间断的电源供给设备(UPS)。
  9. 备份策略、频率和类型,备份保留周期。
  10. 不同数据中心之间的网络连接影响。

发表评论