Asticsearch 8.x 存儲有無壓縮?能壓縮到多少?
1、認知前提
Elasticsearch 支持壓縮,壓縮方式默認為:LZ4 壓縮算法。
具體參見:
The default value compresses stored data with LZ4 compression, but this can be set to best_compression which uses DEFLATE for a higher compression ratio, at the expense of slower stored fields performance.
中文翻譯為:
默認值使用 LZ4 壓縮壓縮存儲的數據,但這可以設置為 best_compression,它使用 DEFLATE 來獲得更高的壓縮率,但會降低存儲字段的性能。
https://www.elastic.co/guide/en/elasticsearch/reference/8.14/index-modules.html#index-codec
這里要引申一下,這屬于:靜態配置,類似:number_of_shard 主分片數,不允許動態修改,除非重建索引。
2、動手驗證一下壓縮比到底能壓縮多少?
2.1 樣例數據準備
以 kibana_sample_flights 飛行數據為例進行驗證。
圖片
我們直接借助 elasticdump 進行導出,以json 存儲,作為原始數據。
導出實現參考:
NODE_TLS_REJECT_UNAUTHORIZED=0 elasticdump \
--input=https://elastic:@172.121.10.114:9200/kibana_sample_data_flights\
--output=/www/elasticsearch_0801_20220713/test/flights.json \
--type=data \
--input-ca=/www/elasticsearch_0801_20220713/elasticsearch-8.1.0/config/certs/http_ca.crt
導出成功截圖:
圖片
所占存儲空間大小:
圖片
2.2 Elasticsearch 默認 LZ4 壓縮算法的存儲大小
2.3 如果修改為:best_compression壓縮后,所占據存儲空間大小如下
需要修改索引:
PUT kibana_sample_data_flights_ext
{
"settings": {
"index.codec": "best_compression"
},
"mappings": {
"properties": {
......省略部分映射描述......
然后,reindex 遷移數據。
POST _reindex
{
"source": {
"index": "kibana_sample_data_flights"
},
"dest": {
"index": "kibana_sample_data_flights_ext"
}
}
3、初步結論
圖片
1)默認壓縮LZ4 算法能壓縮到一半!54.77%,能節省一半的存儲!
新壓縮算法 best_compression 壓縮后,壓縮為原始空間的:35%,也就是能省65%的空間。
壓縮比要求高推薦使用:best_compression。