上截圖是阿里云魏子珺大佬(阿里巴巴集團(tuán)技術(shù)專家)周一叮囑我的。
魏子珺大佬的早期分享參考:
2021 年 Elasticsearch 生態(tài)和技術(shù)峰會(huì)干貨總結(jié)
There’s a new API that supports analyzing the disk usage of each field of an index, including the entire index itself. The API estimates the disk usage of a field by iterating over its content and tracking the number of bytes read https://www.elastic.co/guide/en/elasticsearch/reference/7.15/release-highlights.html#_index_disk_usage_api
POST kibana_sample_data_ecommerce/_disk_usage?run_expensive_tasks=true
用途:
此 API 不支持在以前的 Elasticsearch 版本中創(chuàng)建的索引。
適用于大索引。
PS:小索引的結(jié)果可能不準(zhǔn)確,因?yàn)?API 可能無(wú)法分析索引的某些細(xì)節(jié)部分。
本質(zhì)用途:
技術(shù)人員可直觀看到索引各個(gè)字段占據(jù)存儲(chǔ)空間的大小。
評(píng)估數(shù)據(jù)建模的合理性。
定量指導(dǎo)Mapping 優(yōu)化。
7.15+ 之后的版本才可以用哦。
POST kibana_sample_data_ecommerce/_disk_usage?run_expensive_tasks=true
注意一個(gè)細(xì)節(jié):run_expensive_tasks 意味著這個(gè) API 非常耗費(fèi)資源,所以大家別頻繁驗(yàn)證線上環(huán)境。
召回結(jié)果如下:
執(zhí)行結(jié)果部分截圖
每個(gè)字段的磁盤使用率清晰、明白的列舉出來了。
7.17 版本 Elasticsearch 集群驗(yàn)證一把:
POST _reindex
{
"source": {
"index": "kibana_sample_data_logs",
"_source": [
"host",
"index",
"ip",
"tags",
"response"
]
},
"dest": {
"index": "kibana_sample_data_logs_ext"
}
}
POST kibana_sample_data_logs_ext/_disk_usage?run_expensive_tasks=true
官方并沒有統(tǒng)計(jì),我把結(jié)果數(shù)據(jù)梳理統(tǒng)計(jì)了一下,如下兩張圖所示:
說明了啥?
所有字段的存儲(chǔ)實(shí)際是:倒排索引所占據(jù)存儲(chǔ)空間大小 + doc_values 正排索引存儲(chǔ)空間大小 + store_fields 存儲(chǔ)空間大小等的總和。
再深問一句,這個(gè)和咱們最早設(shè)定的 Mapping 就有關(guān)系了,和數(shù)據(jù)建模就有關(guān)系了。
看一下 Mapping:
{
"kibana_sample_data_logs_ext" : {
"mappings" : {
"properties" : {
"host" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"index" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"ip" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"response" : {
"type" : "long"
},
"tags" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}
再進(jìn)一步看看各個(gè)字段所占據(jù)的存儲(chǔ)空間大?。?br>
能有什么結(jié)論?
之前我們對(duì)于磁盤占據(jù)空間是一個(gè)泛泛的整體概念,現(xiàn)在有了這個(gè) API 我們可以做的很細(xì)
了。
具體到哪個(gè)字段占據(jù)了多少磁盤知道了以后,極大便利的指導(dǎo)我們的數(shù)據(jù)建模。
相當(dāng)于數(shù)據(jù)建模有了可量化的、可視化的參考依據(jù)。
之前兩個(gè)同事可能為某個(gè)字段的某些屬性的設(shè)置會(huì)爭(zhēng)吵,甚至吵得不可開交。
現(xiàn)在不需要了,“走兩步”,對(duì)比一下磁盤容量,直接就能給出孰優(yōu)孰劣的結(jié)論。
圖片來自:優(yōu)酷
個(gè)人更期望的功能就是字段存儲(chǔ)空間的可視化功能,各個(gè)字段占據(jù)一目了然呈現(xiàn)出來,類似:search_profile 的功能。估計(jì)未來版本會(huì)出現(xiàn)。
歡迎大家留言說一下自己的思考。
您或者您的團(tuán)隊(duì)發(fā)現(xiàn)類似好用但相對(duì)小眾的“新功能”,也歡迎第一時(shí)間聯(lián)系我。我會(huì)盡自己的一點(diǎn)微薄之力,讓更多 Elastic 愛好者知道。
感謝魏子珺大佬!
聯(lián)系客服