上篇文章,散仙介紹了.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,變長格式的整形。