ACID模型是数据库设计的基本原则,用来保证商业数据以及重要应用服务的可靠性。MySQL InnoDB存储引擎以ACID模型为基础,实现了数据的高效、安全存储,在一些意外场景,比如软件崩溃,硬件故障,也不会导致数据损坏。如果应用依赖ACID,使用InnoDB存储引擎,就不必再考虑数据一致性检查和故障恢复,因这这些机制Innodb已经完全具备,不必再重复造轮子。
如果系统有额外的软件或者硬件可靠性保障,或者应用允许一些数据的丢失或者不一致,可以通过调整MySQL ACID相关的一些配置,来获取更高的性能和吞吐量。
1. ACID
- A,atomicity,原子性
- C,consistency,一致性
- I,isolation,隔离性
- D,durability,持久性
2. Atomicity 原子性
原子性主要涉及到InnoDB的事务,相关的特性包括:
- autocommit自动提交设置
- commit语句
- rollback语句
3. Consistency 一致性
一致性主要反映进程崩溃恢复场景下,InnoDB内部处理数据的过程,相关的特性包括:
- InnoDB doublewrite buffer
- InnoDB crash recovery
4. Isolation 隔离性
隔离性主要涉及InnoDB的事务,尤其是事务的隔离级别。相关的特性包括:
- autocommit自动提交设置
- 设置事务隔离级别语句
- InnoDB底层锁的实现细节
5. Durability 持久性
持久性主要涉及硬件的设置,依赖硬件如CPU,网络,存储设备的能力。关于持久性的一些原则相对其他来说可能是更加复杂的,因为随着硬件的发展更新,有些原则可能不再适用。MySQL中与持久性相关的特性包括:
- InnoDB doublewrite buffer,由参数innodb_doublewrite决定是否打开。
- innodb_flush_log_at_trx_commit,redo log刷盘策略。
- sync_binlog,binlog刷盘策略。
- innodb_file_per_table,是否使用独立表空间。
- 存储设备的写缓存,比如SSD,RAID卡阵列。
- 存储设备的电容缓存。
- 运行MySQL的操作系统,是否支持fsync系统调用。
- 运行MySQL的机器是否装备不间断的电源供给设备(UPS)。
- 备份策略、频率和类型,备份保留周期。
- 不同数据中心之间的网络连接影响。