Elasticsearch 5.0 磁盘空间节省策略的认识
前言:本文是当时QQ群员讨论磁盘空间如何优化,我搜了下类似的文章,结合官方文档做了一些总结
如果你有疑问,可以联系我参与讨论,或者去原文查看。
NOTE: 磁盘空间节省问题,是得失问题。要省出磁盘空间,必会影响某些功能,如果被影响的功能你不需要,你可以采用相应的磁盘节省策略。
TIP: 磁盘空间节省需要谨慎,一定要看清楚策略的影响。
一、影响因素
-
replication
副本的产生是为了高可用,作为数据的备份,在某些节点挂掉后,保障数据不丢失。从原则上来说,副本数据和数据本身并无区别。因此副本数量,将会成倍数地扩大索引的大小
修改副本大小的命令:
curl -XPUT 'localhost:9200/my_index/_settings' -d ' { "index" : { "number_of_replicas" : 0 } }'
默认副本数为1,早期版本2.3支持在elasticsearch.yml中添加index.number_of_replicas: 0这种形式来修改。5.0版本中不在支持在elasticsearch.yml中修改 index settings 层面的配置
影响: 副本设置为0,虽然会节省一半的磁盘空间,es集群不再高可用,节点一挂,数据就丢。
-
_source
Elasticsearch保留每个传入文档的原始数据JSON的副本。这个_source字段在我们重新结构化原始数据、高亮搜索结果非常有用。但是也占了磁盘空间。可以被disable掉以节省磁盘空间
注意这个原始数据json的副本和上文的replication是两码事,是下文{ }中的内容
PUT my_index/user/1 { "first_name": "John", "last_name": "Smith", "date_of_birth": "1970-10-24" }
影响:你可以查看我单独写的_source字段认识和影响
单个字段也可以选择是否store,也会影响磁盘空间。我认为单个字段store和_source是个体和整体的关系,所以我写在一个段落里面?我此处存疑
-
_all
_all字段维护这一个大字符串数组,包含了所有的term。方便我们在不知道field的情况下,也能搜索出term value。大字符串数组也会占用磁盘空间,也是可以被disable掉的
影响: 你可以查看我单独写的_all字段认识和影响
-
doc_value
doc values是elasticsearch为了减小 heap memory 使用率采用的一种机制。在排序和聚合时能节省heap,但它本身会占用磁盘空间影响:你可以查看我单独写的doc_value认识和影响
-
分词
影响:对字符串进行分词也会对磁盘空间产生影响,一般情况下不分词会节省空间
二、影响程度
本章节的数据来源于参考文章2
测试数据为一个67644119 byte log file
71.212.224.97 - - [28/May/2014:16:27:35 -0500] "GET /images/web/2009/banner.png
HTTP/1.1" 200 52315 "http://www.semicomplete.com/projects/xdotool/"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36"
测试数据大小为67644119
test number | string field | _all | doc value | index size | Expansion ratio (index size / raw size) |
---|---|---|---|---|---|
0 | x | x | x | 67644119 | 1 |
1 | analyzed and not_analyzed | enabled | enabled | 94633818 | 1.399 |
2 | analyzed and not_analyzed | disabled | enabled | 75648416 | 1.118 |
3 | not_analyzed | disabled | enabled | 63079805 | 0.933 |
4 | analyzed and not_analyzed | enabled | disabled | 80608354 | 1.192 |
5 | analyzed and not_analyzed | disabled | disabled | 61680474 | 0.912 |
3 | not_analyzed | disabled | disabled | 48432487 | 0.716 |