第一点背景:
我有一个重要的elasticsearch集群,其主要数据超过20TB(并且必须进行复制)。我们正在使用SSD,因此存储并不便宜。将我的数据重新索引到elasticsearch 5.4.1后,我注意到我的数据占用的存储空间比使用弹性1.7.5时的存储空间多30%。我的猜测是,它是由doc_values
在使用keyword
映射类型时默认打开引起的。
我想衡量特定地图doc_values
占用多少field
?我知道我可以用两个不同的mappings
索引文档并测量差异,但有没有更容易和更快的方法?
我检查了_cat
和indices
apis,但我找不到任何存储详细故障,只有内存。也许我可以在文件系统中找到doc_values文件并测量它们?
由于特殊的插件要求,我使用的是弹性搜索版本5.4.1。
EDIT1: 好的,根据lucene docs doc_values有以下扩展名
.dvd:DocValues数据
.dvm:DocValues元数据
我可以测量给定索引的分片文件夹中这些文件的大小。这里的示例输出:
399M ./nodes/0/indices/O0qTaAQHSDOfEMSD-zZXTw/2/index/_qed_Lucene54_0.dvd
646M ./nodes/0/indices/O0qTaAQHSDOfEMSD-zZXTw/2/index/_wux_Lucene54_0.dvd
185M ./nodes/0/indices/O0qTaAQHSDOfEMSD-zZXTw/2/index/_yve_Lucene54_0.dvd
从我看到的一些索引有更多的文件和一些更少。还不确定我是否可以找出它们属于哪个字段,也许所有doc_values都存储在一起?数据和元数据文件似乎都是二进制文件,所以我无法从中提取任何内容。
EDIT2 : 采用天真的方法来测量我在我的一个节点上检查的文件:
$ du -h ~/elasticsearch/data -d 0
642G /home/chimeo/elasticsearch/data
$ find ~/elasticsearch/data/ -name "*.dv[dm]" -print0 | du -h --files0-from=- --total -s | tail -1
75G total
这几乎占该节点上所有存储空间的12%。在这里打一个班轮来计算比率:
bc <<< "scale=2; "`find ~/elasticsearch/data/ -name "*.dv[dm]" -print0 | du -h --files0-from=- --total -s | tail -1 | cut -f 1 | tr -d G`/`du -h ~/elasticsearch/data -d 0 | cut -f 1 | tr -d G`
我在整个群集上运行这个衬里,结果在0.11-0.12。令我惊讶的是,fielddata(.fdt)文件占据了所有存储空间的近40%。