面试题答案
一键面试日志记录
- 预写式日志(WAL)
- WiredTiger使用预写式日志机制。在对数据进行修改之前,先将修改操作记录到日志文件中。这样即使系统崩溃,在重启时可以通过重放日志来恢复未完成的事务,确保数据的一致性。
- WAL日志按顺序写入,这有利于提高写入性能,因为顺序写入通常比随机写入快。
- 检查点
- 定期创建检查点,将内存中的脏数据(已修改但未持久化到磁盘的数据)刷新到磁盘。检查点会标记日志中的某个位置,在崩溃恢复时,只需要重放检查点之后的日志记录,减少恢复时间。
锁机制
- 文档级锁
- WiredTiger支持文档级别的锁。这意味着不同的事务可以同时修改不同的文档,提高了并发性能。与数据库级或集合级锁相比,文档级锁粒度更细,减少了锁争用。
- 当一个事务要修改某个文档时,会获取该文档的锁。只有获取到锁的事务才能对文档进行操作,其他事务需要等待锁释放。
- 读写锁
- 区分读锁和写锁。多个事务可以同时持有读锁,从而并发读取数据,因为读操作不会修改数据,不会产生冲突。
- 写锁是排他锁,当一个事务持有写锁时,其他事务不能再获取读锁或写锁,以保证写操作的原子性和数据一致性。
- 锁升级
- 在某些情况下,为了减少锁的开销,WiredTiger可能会将文档级锁升级为集合级锁或数据库级锁。例如,当一个事务需要修改集合中大量文档时,将锁升级可以避免频繁获取和释放文档级锁,提高效率,但同时也会增加锁争用的可能性。
并发控制
- 多版本并发控制(MVCC)
- WiredTiger采用多版本并发控制机制。每个写操作会创建数据的新版本,而读操作可以看到数据的某个一致性版本,不受其他未提交写操作的影响。
- 这使得读操作可以与写操作并发执行,提高系统的整体并发性能。读操作不需要等待写操作完成,也不会阻塞写操作,从而实现高效的并发读写。
- 事务协调
- 有专门的事务协调机制来管理事务的开始、提交和回滚。它确保事务的ACID(原子性、一致性、隔离性、持久性)特性得到满足。例如,在事务提交时,协调机制会确保所有相关的修改都已正确记录到日志和持久化存储中。