Skip to content

Latest commit

 

History

History
35 lines (19 loc) · 1.8 KB

DeveloperGuide.md

File metadata and controls

35 lines (19 loc) · 1.8 KB

BSF开发者指南

文件结构

.bsf

提醒

所有整形数(包括:Int和Short),序列化到文件时,都采用Big Endian(即:网络序)。如果您用C语言去解析.bsf头,请格外注意编译环境;如果您用Java解析,则一致的(Java默认是Big Endian)。

.seg

segment有个12B的固定头部。最必要的信息是第4个字段usedSize,表示segment文件的实际使用大小。您可能会说,为什么需要额外存储这个值?文件大小难道不是操作系统的文件系统就管理了的吗?!主要是因为实现时,底层采用了内存映射机制,每次映射了BSFConf.segmentLimitBytes大小,默认值是128MB,相当于每次segment都是以128MB为单位分配,无论它实际是否用到。

另外,每次追加的trunk的结构很简单:一个trunk-head表示trunk-body的字节数,紧随其后的就是trunk-body。它没有像kafka这类系统设计一定的头部字段,比如时间戳呀,key字段呀。


Tips

  • 二进制协议整型数序列化采用网络序,既Big Endian。避免C与Java的不兼容。
  • 基于文件的单元测试:在系统临时文件夹下生成临时文件,单测完成后,自动删除。详见 BSFMetaTest.java
  • 数据文件也需增加头部字段:原本打算meta信息都存放在.bsf文件里,但是由于segment文件采用内存映射机制写文件,它会进行空间的预分配。刚写10个字节,就预分配了128MB,所以需要在文件的头部记录下usedSize

TODO

  • 自动清理消费完的segment文件。

附录-1:实验