一、本文目的是介绍go-diskqueue
go-diskqueue,应用于nsq:https://github.com/nsqio/nsq,作用是存储内存装不下的消息到磁盘,并支持读取。
go-diskqueue:https://github.com/yudongdai/go-diskqueue/blob/master/diskqueue.go(注释版)
二、文件的组织
2.1文件的组成
2.1.1 元数据,文件名格式如下:{TopicName}.diskqueue.meta.dat,每个Topic只会存在1个文件
2.1.2 文件数据,文件名格式如下:{TopicName}.diskqueue.{num}.dat,因为限制了单文件大小,每个Topic只会存在多个文件,当一个文件按编号递增
2.2数据结构
2.2.1元数据文件,记录着写了多少消息到磁盘,写到哪个编号文件了,读到哪个编号文件了,读的偏移量:
_, err = fmt.Fprintf(f, "%d\n%d,%d\n%d,%d\n",
d.depth, //落地消息个数
d.readFileNum, d.readPos, //读文件编号ÿ