面试题答案
一键面试- WAL日志机制
- SQLite在WAL模式下,写入操作不会直接修改数据库文件。而是将修改内容追加到WAL日志文件中。这种方式保证了在写入过程中,如果发生崩溃,已写入WAL日志的内容可以在系统恢复时重新应用,从而确保数据一致性。
- 事务原子性
- 写入操作通常以事务的形式进行。在WAL模式下,整个事务的修改会被完整地记录在WAL日志中。只有当事务提交时,才会将事务的影响反映到数据库文件(通过将WAL日志中的内容合并到数据库文件)。如果事务在执行过程中失败,由于没有对数据库文件进行直接修改,数据库状态保持不变,保证了事务的原子性,进而保证数据一致性。
- Checkpoint机制
- WAL日志会随着写入操作不断增长。Checkpoint机制用于将WAL日志中的修改合并到数据库文件,并清空或截断WAL日志。在Checkpoint过程中,系统会确保WAL日志中的所有已提交事务被正确地应用到数据库文件,从而保证数据库文件的一致性。
- 锁机制
- 在WAL模式下,虽然允许多个连接同时进行读操作,但写入操作仍然需要获取锁。SQLite使用轻量级的锁机制,在写入事务开始时获取锁,防止其他写入事务同时进行,避免数据冲突,保证数据一致性。读操作在读取时会根据WAL日志的状态获取合适的数据库版本,确保读取到的数据是一致的。