find balance哲学
看到一个用rust重写sqlist的项目在解决这个问题,随手普及记录一下
WAL(Write-Ahead Log)是SQLite的预写式日志,核心是先写日志再更新数据,保证事务原子性与持久性
WAL模式与传统回滚日志模式的核心区别
1. 写操作方式:
WAL 是追加写日志,修改先写入 WAL 文件而非直接更新数据库页(相当于 又加了一个文件 解决问题)
回滚日志是原地修改+写回滚页,修改前先把旧数据写入回滚日志。
2. 并发能力:
WAL支持读不阻塞写、写不阻塞读;
回滚日志下写操作会锁定数据库,读操作需等待写锁释放。
3. 恢复逻辑:
WAL 重启时重放日志中的修改到数据库;
回滚日志崩溃时,根据日志恢复被修改页的旧数据。