我有一个CentOS 6.5我安装的服务器Elasticsearch 1.3.2。
我的elasticsearch.yml
配置文件是对 elasticsearch 默认配置文件的最小修改。删除所有注释行后,它看起来像这样:
cluster.name: xxx-kibana
node:
name: "xxx"
master: true
data: true
index.number_of_shards: 5
index.number_of_replicas: 1
path:
logs: /log/elasticsearch/log
data: /log/elasticsearch/data
transport.tcp.port: 9300
http.port: 9200
discovery.zen.ping.multicast.enabled: false
Elasticsearch 应该压缩在默认情况下,我读过各种基准测试,压缩率从最低 50% 到最高 95% 不等。不幸的是,我的压缩率为 -400%,换句话说:使用ES存储的数据比相同内容的文本文件占用4倍的磁盘空间。 看:
12K logstash-2014.10.07/2/translog
16K logstash-2014.10.07/2/_state
116M logstash-2014.10.07/2/index
116M logstash-2014.10.07/2
12K logstash-2014.10.07/4/translog
16K logstash-2014.10.07/4/_state
127M logstash-2014.10.07/4/index
127M logstash-2014.10.07/4
12K logstash-2014.10.07/0/translog
16K logstash-2014.10.07/0/_state
109M logstash-2014.10.07/0/index
109M logstash-2014.10.07/0
16K logstash-2014.10.07/_state
12K logstash-2014.10.07/1/translog
16K logstash-2014.10.07/1/_state
153M logstash-2014.10.07/1/index
153M logstash-2014.10.07/1
12K logstash-2014.10.07/3/translog
16K logstash-2014.10.07/3/_state
119M logstash-2014.10.07/3/index
119M logstash-2014.10.07/3
622M logstash-2014.10.07/ # <-- This is the total!
相对:
6,3M /var/log/td-agent/legacy_api.20141007_0.log
8,0M /var/log/td-agent/legacy_api.20141007_10.log
7,6M /var/log/td-agent/legacy_api.20141007_11.log
6,7M /var/log/td-agent/legacy_api.20141007_12.log
8,0M /var/log/td-agent/legacy_api.20141007_13.log
7,6M /var/log/td-agent/legacy_api.20141007_14.log
7,6M /var/log/td-agent/legacy_api.20141007_15.log
7,7M /var/log/td-agent/legacy_api.20141007_16.log
5,6M /var/log/td-agent/legacy_api.20141007_17.log
7,9M /var/log/td-agent/legacy_api.20141007_18.log
6,3M /var/log/td-agent/legacy_api.20141007_19.log
7,8M /var/log/td-agent/legacy_api.20141007_1.log
7,1M /var/log/td-agent/legacy_api.20141007_20.log
8,0M /var/log/td-agent/legacy_api.20141007_21.log
7,2M /var/log/td-agent/legacy_api.20141007_22.log
3,8M /var/log/td-agent/legacy_api.20141007_23.log
7,5M /var/log/td-agent/legacy_api.20141007_2.log
7,3M /var/log/td-agent/legacy_api.20141007_3.log
8,0M /var/log/td-agent/legacy_api.20141007_4.log
7,5M /var/log/td-agent/legacy_api.20141007_5.log
7,5M /var/log/td-agent/legacy_api.20141007_6.log
7,8M /var/log/td-agent/legacy_api.20141007_7.log
7,8M /var/log/td-agent/legacy_api.20141007_8.log
7,2M /var/log/td-agent/legacy_api.20141007_9.log
173M total
我做错了什么?为什么数据没有被压缩?
我暂时将其添加index.store.compress.stored: 1
到我的配置文件中,因为我发现elasticsearch 0.19.5
发行说明(那是store
压缩首次出现的时候),但我仍然无法判断它是否产生了影响,而且无论如何,现在压缩应该默认处于开启状态……
答案1
Elasticsearch 不会自动缩小数据。对于任何数据库来说都是如此。除了存储原始数据外,每个数据库还必须存储元数据。普通数据库只存储数据库管理员预先选择的列的索引(以便更快地搜索)。ElasticSearch 不同,因为它会索引每一个默认情况下,索引是 1000 列。这使得索引非常大,但另一方面在检索数据时却提供了完美的性能。
在正常配置下,索引后原始数据会增加 4 到 6 倍。尽管这在很大程度上取决于实际数据。但这实际上是预期的行为。
因此,为了减小数据库大小,您必须像在 RDBM 中所做的那样反过来做:排除不需要索引的列或存储这些列。
此外,您可以打开压缩功能,但这仅当您的“文档”很大时才会改善,而对于日志文件条目来说可能并非如此。
这里有一些比较和有用的提示:https://github.com/jordansissel/experiments/tree/master/elasticsearch/disk
但请记住:搜索是有成本的。需要付出的成本是磁盘空间。但您可以获得灵活性。如果您的存储大小超出,则可以水平扩展!这就是 ElasticSearch 的优势所在。