03 2022 档案
摘要:InnoDB Buffer Pool 数据页 InnoDB中,数据管理的最小单位为页,默认是16KB,页中除了存储用户数据,还可以存储控制信息的数据。InnoDB IO子系统的读写最小单位也是页。如果对表进行了压缩,则对应的数据页称为压缩页,如果需要从压缩页中读取数据,则压缩页需
阅读全文
摘要:lab4是实现一个基于Percolator模型的分布式事务。 lab4a lab4a是介绍三种Column Family的作用和协作,分别包括CfDefault, CfWrite, CfLock。 CfDefault是暂存实际数据的cf, CfWrite是写入时间的记录,CfLock是该数据的锁。数
阅读全文
摘要:lab2c lab2c是增加Raft状态机对快照的支持,因为日志不可能无限增长,所以在增长到一定程度时,我们需要通过压缩成快照的方式来把这个Index之前的所有日志压缩成一个最后的变更状态。 Raft状态机修改 引入日志之后,RaftLog的firstIndex不再是l.entries的首元素的In
阅读全文
摘要:lab2b 集群视图下的日志的复制和状态的写入。 与lab2a相比,lab2b需要阅读大量代码了解整个集群是怎么工作的。首先,我们要对整个集群有个大概的了解(可以看文档)。 node和store看作等价的就行 可以看到,一个node上面可以跑多个Raft实例(叫做Peer/RaftGroup),每个
阅读全文
摘要:TinyKV lab2aa TinyKV lab2aa是按照论文实现一个Raft状态机的基本框架,主要是实现raft.go和log.go的函数。Raft的状态有三种:跟随者,候选者,领导者。状态的变更主要通过消息传递完成。为了方便后面的统计,我在Raft结构体增加一些变量 agreeCnt int
阅读全文