在海量日志存儲(chǔ)場(chǎng)景中愉阎,索引膨脹率是一個(gè)關(guān)鍵指標(biāo)桦踊,直接影響存儲(chǔ)成本和查詢性能椅野。它表示原始數(shù)據(jù)與索引數(shù)據(jù)在磁盤(pán)上所占空間的比率。較高的索引膨脹率不僅增加了存儲(chǔ)成本籍胯,而且可能會(huì)影響查詢速度竟闪,尤其是在 I/O 密集型的查詢中。因此杖狼,我們需要密切關(guān)注和優(yōu)化索引膨脹率炼蛤。接下來(lái),我們將比較 Elasticsearch 和 Easysearch 在處理相同數(shù)據(jù)時(shí)的索引膨脹率蝶涩。
測(cè)試結(jié)果 #
一圖勝千言理朋,下圖是 Easysearch v1.1 和 Elasticsearch v6.4.3 的索引大小測(cè)試對(duì)比,Y 軸單位是 MB绿聘。
使用 Easysearch v1.1 的壓縮功能嗽上,比 Elasticsearch v6.4.3 的索引大小降低了 50%。
測(cè)試說(shuō)明 #
以下是對(duì) Elasticsearch v6.4.3 版本熄攘,測(cè)試數(shù)據(jù) 500 萬(wàn)條大小 1.054G(1080M)的 nginx 日志兽愤,使用 es 默認(rèn)的 mapping,分別用 best_compression 和 default 的壓縮策略進(jìn)行寫(xiě)入。 Elasticsearch v6.4.3
索引 | 大小(MB) | 膨脹率 | 條數(shù)(萬(wàn)) |
---|---|---|---|
nginx_default_1g | 1812.61 | 1.61 | 500 |
nginx_best_1g | 1551.36 | 1.42 | 500 |
然后我們對(duì)比下浅萧,使用極限科技的 Easysearch 進(jìn)行索引膨脹率的壓測(cè).
Easysearch 是什么逐沙? #
INFINI Easysearch 衍生自基于開(kāi)源協(xié)議 Apache 2.0 的 Elasticsearch 7.10 版本。 Easysearch 的目標(biāo)是提供一個(gè)輕量級(jí)的 Elasticsearch 可替代版本洼畅,并繼續(xù)完善和支持更多的企業(yè)級(jí)功能吩案,與 Elasticsearch 相比,Easysearch 更關(guān)注在搜索業(yè)務(wù)場(chǎng)景的優(yōu)化和繼續(xù)保持其產(chǎn)品的簡(jiǎn)潔與易用性帝簇。 安裝包大小只有 54 兆徘郭,相比 Elasticsearch 動(dòng)輒一兩百兆的安裝包更加輕量級(jí)。 Easysearch v1.1
索引 | 大小(MB) | 膨脹率 | 條數(shù)(萬(wàn)) |
---|---|---|---|
nginx_default_1g | 1514 | 1.33 | 500 |
nginx_best_1g | 1286 | 1.138 | 500 |
nginx_zstd_1g | 1015.3 | 0.94 | 500 |
nginx_reuse_1g | 758.39 | 0.70 | 500 |
注意上面使用到的 Easysearch 的壓縮策略有 4 種:
壓縮策略 | 描述 |
---|---|
default | 和 Elasticsearch 的 default 壓縮策略一致己儒。 |
best_compression | 和 Elasticsearch 的 best_compression 一致崎岂。 |
ZSTD | ZSTD(Zstandard)是一種開(kāi)源的壓縮算法和壓縮庫(kù)捆毫,旨在提供高性能和高壓縮比的數(shù)據(jù)壓縮解決方案闪湾。由 Facebook 開(kāi)發(fā)并開(kāi)源的一個(gè)壓縮庫(kù),Easysearch 1.1 版引入了這個(gè)壓縮算法作為一個(gè)可選的壓縮策略绩卤,分別對(duì)存儲(chǔ)字段途样,doc_values,和詞典文件進(jìn)行了壓縮濒憋,并且 Easysearch 使用的 zstd 是純 java 版何暇,不依賴底層的操作系統(tǒng)和 cpu 架構(gòu),無(wú)需單獨(dú)編譯可以直接部署在國(guó)產(chǎn)的操作系統(tǒng)和芯片上凛驮。 |
index.source_reuse | Easysearch v1.1 新增加的一個(gè)索引配置項(xiàng)裆站,表示是否對(duì) source 中的字段進(jìn)行復(fù)用,熟悉 Elasticsearch 存儲(chǔ)結(jié)構(gòu)的都知道黔夭,es 底層依賴 lucene 作為核心的存儲(chǔ)和查詢引擎宏胯,默認(rèn) mapping 下,在將 es 的字段解析成 lucene 的對(duì)應(yīng)字段后本姥,一個(gè) keyword 類型的字段會(huì)分別存儲(chǔ)在 _source 和 doc_values 字段里肩袍,Easysearch 將 keyword 字段在 source 存儲(chǔ)時(shí)進(jìn)行了過(guò)濾,然后在查詢階段又利用 doc_values 對(duì) source 里過(guò)濾的 keyword 字段進(jìn)行了無(wú)縫拼接婚惫,用戶層面感知不到對(duì) keyword 字段的特殊處理氛赐。 |
default 和 best_compression 比之前 6.43 版的膨脹率降低是因?yàn)榈靡嬗?lucene 版本的升級(jí)到了 8.11.2,新版的 lucene 的壓縮比之前的版本有了很大提升先舷。 重點(diǎn)是最后利用 ZSTD 加 index.source_reuse艰管,存儲(chǔ)資源的占用比之前 6.43 版本的 best_compression 的 1.5G 減少了 50%,對(duì)比相同 lucene 版本的 best_compression蒋川,存儲(chǔ)資源也減少了 40%牲芋,帶來(lái)以下幾點(diǎn)好處:
- 降低存儲(chǔ)成本:較低的索引膨脹率意味著存儲(chǔ)相同量的數(shù)據(jù)需要更少的磁盤(pán)空間,這將直接減少硬件和維護(hù)成本。
- 提高系統(tǒng)擴(kuò)展性:由于索引占用的存儲(chǔ)空間較小街图,可以在相同的硬件上處理更多的數(shù)據(jù)浇衬,或者在擴(kuò)展存儲(chǔ)時(shí),需要添加的硬件更少餐济。
- 更高效的數(shù)據(jù)備份和傳輸:小的索引文件意味著備份和傳輸數(shù)據(jù)的時(shí)間和帶寬需求都會(huì)減少耘擂。
使用方法 #
##啟用ZSTD
PUT nginx_zstd
{
"settings": {
"codec": "ZSTD"
}
}
##啟用index.source_reuse
PUT nginx_reuse
{
"settings": {
"index.source_reuse": true
}
}
##結(jié)合使用
PUT nginx_reuse
{
"settings": {
"codec": "ZSTD",
"index.source_reuse": true
}
}