上篇文章,散仙介绍了.fnm的索引文件格式的具体结构及数据类型,那么本篇呢,将介绍另外两种格式.fdx和fdt。 数据库
Stored Field values,表明着存储字段的具体的值,对于在索引里的每个文档(Document),本质上都是存储着一系列的基于属性名和值的K-V段,其实也就是字段的名和字段的值,这一点和大多数NOSQL的存储格式是很是类似的,都是很是灵活松散的。 spa
存储的字段通常都是关于这个文档的辅助信息,例如:它的标题,URL,或一个标识符是否访问数据库,另外须要在搜索时并取出值的字段,是必须存储的,若是这个字段不是必须存储的,可是检索时却须要被检索,那么在索引时,能够设置索引,不存储,由于索引的大小会影响检索的效率,因此尽可能不要浪费索引存储的空间。 指针
存储的字段(Stored Fields)有2个核心的文件。 索引
1,索引字段的数据在.fdx的文件里。 文档
索引一般用于检索特定的文档在字段里,索引里包含一个固定长度的数据使这个文件更加容易的支持随机访问,文档的位置存储在8位的文件里。 字符串
每一个索引文档都包含一个它对应的存储数据的指针,以便于可以更加快速检索。 it
FieldIndex (.fdx) --> <Header>, <FieldValuesPosition> SegSize io
Header --> CodecHeader 效率
FieldValuesPosition --> Uint64 搜索
2,字段存储的数据在.fdt的文件里
每一个存储的字段都包含以下信息:
FieldData (.fdt) --> <Header>, <DocFieldData> SegSize
Header --> CodecHeader
DocFieldData --> FieldCount, <FieldNum, Bits, Value> FieldCount
FieldCount --> VInt
FieldNum --> VInt
Bits --> Byte
(1)第一个bit位被保留
(2)第二个是一个包含着二进制数据的字段
(3)第三个bit位被保留
(4)第四至第六位,(mask: 0x7<<3)定义一个数字类型的字段
若是没有数字字段存储,全部的bit位将被清除
1<<3: 值是一个int类型
2<<3: 值是一个Long类型
3<<3: 值是一个Float类型
4<<3: 值是一个Double类型
Value 存储的类型能够是字符串,二进制类型,整形,长整型(依赖bit)
BinaryValue 字节类型的存储
ValueSize VInt,变长格式的整形。