文章正文
WAL模式学习
一、WAL模式
优点 | 缺点 |
1、大多数场景下更快。 2、读写之间不相互阻塞,更大的并行性。 3、磁盘操作更顺序。 4、使用更少的fsync()操作,减少系统脆弱的问题。 | 1、需要文件系统支持共享内存 2、使用sqlite的进程只能在当前主机上,不能使用网络文件系统 3、事务对于单个数据库具有原子性,但对多个不具有。 4、WAL模式下,不能更改数据库页大小 5、不能使用只读的WAL模式数据库 6、对大多数读和少量写会稍微慢一些 7、多一个-wal文件和一个-shm共享内存文件 8、需要一个额外的checkpoint操作 9、对于大的事务,WAL会变慢,wal文件会增大,甚至导致IO或磁盘满的错误 |
二、文件格式
2.1、wal文件格式
Wal文件的开始是一个wal文件头,后面就是一个个的数据帧。
每一个数据帧都有一个帧头如下所示
每一个数据帧对应着数据库中的一个单个页,并且可以在checkpoint后重用。一个数据帧有效的标记有两个,一个是salt-1和salt-2与wal头相匹配,第二,校验和与wal头中24byte以及每一帧的前8比特匹配。
2.2校验和算法
每一帧都要进行校验和。
2.3checkpoint算法
在每一次checkpoint wal头中的salt1增加,salt从新随机化。这个机制为了在checkponint奔溃时,区分旧帧和新帧。
2.4读算法
在读一个page的时候
1、确认wal文件是否包含Page P。如果包含一个有效的P就从WAL文件读,如果不包含就从数据库中读。
2、在开始一个读事务的时候,会首先获得wal文件中最后一个有效的帧索引(maxFrame)。既是有新的数据写入WAL文件,reader使用mxFrame之前的数据,这就会使得,多个reader可能获得不同的数据。
3、由于Page P可能在WAL中的任意位置,所以为了加快reader读取的速度,加入了WAL-index数据结构。
2.5wal-index 格式
Wal-index是一个共享内存,对应的映射文件为“-shm”结尾,所以wal模式不能适用于网络文件系统。Wal-index可以在系统奔溃后使用wal文件从新建立。总的来说wal-index就是快速的返回不大于MaxFrame的page P的索引。
未完待续。。。
July 15, 2015, 11:44 p.m. 作者:zachary 分类:数据库 阅读(1630) 评论(0)