Elasticsearch 使用了太多的磁碟空間
我有一個安裝了Elasticsearch 1.3.2的****CentOS 6.5伺服器。
我的
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
中發現了這一點(那是壓縮首先出現的時候),但我還不能判斷它是否有影響,無論如何壓縮應該是 ON預設,現在…elasticsearch 0.19.5
store
Elasticsearch 不會自動收縮您的數據。這適用於任何數據庫。除了儲存原始數據外,每個數據庫還必須儲存元數據。普通數據庫只為 db-admin 預先選擇的列儲存索引(以便更快地搜尋)。ElasticSearch 是不同的,因為它預設索引每一列。從而使索引非常大,但另一方面在檢索數據時提供了完美的性能。
在正常配置中,您會看到索引後原始數據增加了 4 到 6 倍。儘管它在很大程度上取決於實際數據。但這實際上是預期的行為。
因此,要減小數據庫大小,您必須像在 RDBM 中那樣採用相反的方法:將不需要索引的列排除在索引或儲存之外。
此外,您可以打開壓縮,但這只會在您的“文件”很大時有所改善,這對於日誌文件條目可能並非如此。
這裡有一些比較和有用的提示:https ://github.com/jordansissel/experiments/tree/master/elasticsearch/disk
但請記住:搜尋是有代價的。付出的代價是磁碟空間。但是你獲得了靈活性。如果您的儲存大小超過,則水平增長!這就是 ElasticSearch 獲勝的地方。