倒排索引是通過分詞策略在詞和文章之間建立壹個映射表,這個詞典+映射表就是倒排索引。
倒排索引的底層實現基於FST(有限狀態轉換器)數據結構。
lucene [lu'sen]從4+版開始廣泛使用的數據結構是FST。FST有兩個優點:
使用專家系統進行分段預分配。
不會,因為片段的數量是文檔傳送算法中的壹個重要元素:
shard = hash(路由)% number_of_primary_shards
動態修改片段將意味著幾乎要對文檔數據進行重新索引,這是比僅僅將片段從壹個節點復制到另壹個節點更重量級的操作。
壹個片段存在於單個節點中,壹個節點可以包含多個片段。
ElasticSearch是天然分布的,實現橫向擴展時是分段預分配的。創建索引時,選擇適當的切片數量。
隨著數據量的增加,節點的數量可以動態增加,elasticSearch會自動給新增加的節點分配碎片。當重新分配完成時,每個片段將具有至少兩倍於先前的操作速度。
默認情況下,elasticSearch中新添加的索引被分配了五個主要部分。這意味著我們最多可以將那個索引分散到五個節點上,每個節點都有壹個片段。
不,切片不是沒有成本的。
適當預分配es是好的,但是幾千段有點不好。
ElasticSearch推薦的最大JVM堆空間是30~32G,所以把妳的碎片最大大小限制在30GB,然後對碎片的數量做壹個合理的估計。例如,如果妳認為妳的數據可以達到200GB,建議妳最多分配7到8個碎片。
壹開始好的方案是按照1.5~3倍妳的節點數的原則創建碎片。例如,如果您有3個節點,建議您創建不超過9(3x3)個片段。當性能下降時,添加節點,es會平衡碎片的放置。
有基於日期的索引需求,索引數據的搜索場景很少。也許這些索引會達到上百個,但是每個索引的數據量只有1GB甚至更少。對於這個類似的場景,建議只給索引分配1個段。如果日誌管理是壹個日期的索引需求,那麽會有很多日期索引,但是每個索引中存儲的日誌數據量非常少。
副本碎片化可以實現高可用性。當持有主切片的節點掛起時,副本切片將提升為主切片的角色。
當寫入索引時,副本切片與主切片做相同的工作。新文檔首先被索引到主切片中,然後與所有其他副本切片同步。增加副本碎片不會增加索引容量。
副本碎片可以滿足讀取請求。如果索引偏向於查詢,可以通過增加副本數來提高查詢性能。但是,為此應增加額外的硬件資源。
當使用上述配置時,每個切片的重復切片數是1。
具有兩個主分區副本的索引可以在四個節點之間水平伸縮。
Elasticsearch:權威指南?數據建模?資料片設計?擴充單元
面試官:Elasticsearch是如何設計指數的?完美的答案來了。
elasticsearch應該設置多少切片?
新年手,24道高級必備Elasticsearch面試題(推薦收藏!)