观察es数据目录内会发现大量文件如下图所示:
一个shards内的文件
其中重要的有如下几个,存储三大头:
文件后缀 | 文件含义 |
---|---|
.fdt | Source文档存储的字段值 |
.fdx | Source文档索引指针,需载入内存 |
.fnm | 存储fields信息 |
.dvd | docValues值,列式存储 |
.dvm | docValues原信息,索引 |
.doc | 包含每个term词频的docs列表即倒排表 |
.pos | index中term出现的位置信息 |
.tim | term词典,存储term信息(block) |
.tip | term词典的索引,需载入内存(FST) |
.dim | 数值类型索引,即BKD树 |
.dii | .dim的索引 |
segment_2c | 记录提交点信息 |
write.lock | 防止多个IndexWriters写同一个文件 |
source源文档相关:
fnm,fdx,fdt 为行存储文件索引和value;
列式存储相关(sort/agg):
dvm,dvd为列式存储即docValue;
倒排索引相关:
tip,tim,pos,doc为倒排索引及词典索引相关内容。
kdd,kdi,kdm与BKD数相关:
BKD Tree,叶子节点存储一组值集合。当 es 做 ranger 查询的时候(适用于数值,日期,字符串类型),内存里的 B-tree 可以帮助快速定位到满足查询条件的叶子结点块在磁盘上的位置,之后对叶子结点块的读取几乎都是顺序的,即索引和数据分离。
存储文件压缩如下图(from tx 毕杰山)
tx大佬针对底层不同种类文件设计了一套压缩算法选择方案
网友评论