亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

elasticsearch菜鳥教程 阿里云elasticsearch內核介紹


elasticsearch菜鳥教程 阿里云elasticsearch內核介紹

文章插圖
前言前兩周寫過一篇《基于Lucene查詢原理分析Elasticsearch的性能》,在最后留了一個彩蛋,說下一篇會介紹一種可以極大的優(yōu)化查詢性能的技術 。本文就來介紹這種技術——IndexSorting 。
因為IndexSorting是在ES6.0之后才作為實驗性的功能加入,相關的介紹資料還比較少,所以大部分人對它不夠了解 。另一方面是,想要理解它為什么能夠優(yōu)化性能、適合哪些場景、內部如何實現(xiàn)、有何副作用等,也需要花一翻功夫 。所以本文專門對IndexSorting進行一個介紹,并分析它的作用、實現(xiàn)、適用場景等 。如果你的場景能用上IndexSorting,那么它肯定會給你帶來一個巨大的性能提升!
什么是IndexSorting?IndexSorting是ES的新功能
在Elasticsearch中,IndexSorting是一個很新的功能,6.0版本才引入,并且標記這個功能是Beta版(6.5版本可能會去掉Beta標記) 。
在Lucene中,IndexSorting其實已經發(fā)展了一段時間 。最早在10年,Lucene提供了一個IndexSorter的工具,作為一個離線工具可以對Index數(shù)據排序后生成一個新的Index 。后來13年加入了SortingMergePolicy,在Segment進行merge的時候可以生成排好序的新Segment,在17年又加入了Sorting on flushed segment的功能,在Segment最初生成時就進行排序 。另一方面是Lucene在查詢時也做了很多優(yōu)化,如果有IndexSorting,很多地方做了提前中斷,后面會講提前中斷對查詢性能的巨大作用 。經過幾次Lucene的改進和優(yōu)化,IndexSorting這個功能也終于被集成進Elasticsearch 。
IndexSorting是一種預排序
與查詢時的Sort不同,IndexSorting是一種預排序,即數(shù)據預先按照某種方式進行排序,它是Index的一個設置,不可更改 。大家知道,Elasticsearch的底層是Lucene,Lucene中是以Segment為單位進行查詢的,這里說的IndexSorting對數(shù)據進行預排序也是在每個Segment內有序的 。
一個Segment中的每個文檔,都會被分配一個docID,docID從0開始,順序分配 。在沒有IndexSorting時,docID是按照文檔寫入的順序進行分配的,在設置了IndexSorting之后,docID的順序就與IndexSorting的順序一致 。
舉個例子來說,假如文檔中有一列為Timestamp,我們在IndexSorting中設置按照Timestamp逆序排序,那么在一個Segment內,docID越小,對應的文檔的Timestamp越大,即按照Timestamp從大到小的順序分配docID 。
為什么IndexSorting可以優(yōu)化性能?
提前中斷
IndexSorting能夠優(yōu)化性能,主要就是靠四個字,“提前中斷” 。但是提前中斷是有條件的,需要查詢的Sort順序與IndexSorting的順序相同,并且不需要獲取符合條件的記錄總數(shù)(TotalHits) 。
Lucene中的倒排鏈都是按照docID從小到大的順序排列的,在進行組合條件查詢時,也是按照docID從小到大的順序選出符合條件的doc 。那么當查詢時的Sort順序與IndexSorting的順序相同時,會發(fā)生什么呢?
比如查詢時希望按照Timestamp降序排序后返回100條結果,在Lucene中進行查詢時,發(fā)現(xiàn)docID對應的doc順序也剛好是Timestamp降序排序的,那么查詢到前100個符合條件的結果即可返回,這100個一定也是Timestamp最大的100個,這就做到了提前中斷 。
提前中斷可以極大的提升查詢性能,特別是當一個查詢條件命中的文檔數(shù)量非常多的時候 。在沒有IndexSorting時,必須把所有符合條件的文檔的docID掃描一遍,并且讀取這些doc的一些字段來排序,選出符合條件的doc 。有了IndexSorting之后,只需要選出前Top個doc即可,避免了全部掃描,性能甚至可以提升幾個數(shù)量級 。
IndexSorting提高了數(shù)據壓縮率
Lucene中使用了很多的壓縮算法來對數(shù)據進行壓縮,壓縮一方面減少了磁盤使用量,另一方面也減少了查詢時讀取磁盤的數(shù)據量和IO次數(shù)等,對查詢性能有很大幫助 。


以上關于本文的內容,僅作參考!溫馨提示:如遇健康、疾病相關的問題,請您及時就醫(yī)或請專業(yè)人士給予相關指導!

「愛刨根生活網」www.malaban59.cn小編還為您精選了以下內容,希望對您有所幫助: