WAL
WAL(Write Ahead Log) 预写日志,是数据库系统中常见的一种手段,用于保证数据操作的原子性和持久性
在游戏开发中,某些重要模块,如邮件、充值、商城等,都可以引入 WAL 保证其可靠性
甚至可以在游戏框架层: DB 框架级别、事务框架级别,引入 WAL 重底层保证其可靠性
WAL 实现要点
参考 Etcd WAL 实现,总结下至少应该有以下一些特性或优化手段:
要点 | 说明 | 目的 |
---|---|---|
flock | 独占 WAL 文件 | 不会被意外删除或修改 |
fallocate | 预分配磁盘空间 | 是顺序写的前提保障 |
renameat | 临时预准备完毕 WAL 文件后,正式重名 WAL 文件 | 保证 WAL 文件创建的原子性,避免创建一个数据顺坏的 WAL 文件 |
file pipeline |
预先多准备好 1 份临时的 WAL 文件 | 避免 create WAL file 卡顿 |
pad bytes |