Lucene系列 index彈性擴充套件

2021-07-07 07:22:07 字數 1243 閱讀 8628

shard與replicaindex擴充套件一般包含橫向擴充套件和縱向擴充套件,將大資料切分成小資料塊,或者將資料分片複製copy到一台機器.

橫向擴充套件策略:

考慮線上機器執行,此時要保證搜尋正常的work,並向外提供搜尋服務.

1.首先應該停掉index write操作, 即利用一些訊息佇列儲存操作階段的線上來的增量訊息.

2.迴圈依次複製所有的訊息分片.

3.開啟之前的index服務介面和新的replica.

縱向擴充套件策略:

當索引量比較大,disk讀寫速度變慢,搜尋latency變高.我們需要增加分片,從而改變單個shard index的大小

縱向擴充套件分兩種:

(1)增加新的shard,之後所有的新增索引建到新的shard上,之前的刪除操作要遍歷所有的shard.

(2)增加新的shard,把所有資料在平均分配一下.例如之前有2個shard,現在將2個shard的資料平均分配到3個shard上.新增的資料還是按路由規則(hash規則)寫入到某乙個特定的shard中.

以下策略是主要是針對無原始資料或者重建索引時間代價比較大的,這種情況下,即使在hadoop index 離線索引也不可抵消.我們實現了以下方案.具體實現:

以2個shard擴充套件成3個shard為例,如圖:

我們定義document文件路由規則, hash函式: routeid = documentid % shardsize;

根據hash函式我們可以知道,shard1上的資料需要**資料到shard1』, shard2』, shard3』上.我們知道lucene底層資料的刪除是先將要刪除的doc設定標識位delete標識, 在index merge的時候進行刪除.我們可以利用這個規律來進行. 假設shard1有三個文件.原始標識位是111,然後複製2份, 這時候就有三份shard1.通過設定標識位100,010,001,這樣就shard1的資料根據我們之前定義的規則hash出來了.同理shard2也是這樣.

如此進行之後,將分配到同乙個node上的兩個segment資料合併成統一的乙份索引.

上面要注意的問題:

1.上線服務一致性問題,即在shard1,shard2**的過程中,這個時間段如果還繼續向外提供服務,可能不穩定.因此如果有多個replica服務就可以停掉此服務.

2.線上資料的copy是比較費時間的,即相對於資料重建索引的代價而言,一般較小

Lucene構建index效能調整

1 調整maxbuffereddocs和mergefactor,經過除錯,發現maxbuffereddocs 1000,mergefactor 100時效能較好。indexmodifier new indexmodifier c indexpath newstandardanalyzer true ...

pandas系列之index小記

import pandas as pd 資料準備 df pd.dataframe np.arange 20 reshape 5,4 index 1 3,6 9,10 重置索引且保留原始索引 df.reset index 重置索引且不保留原始索引 df.reset index drop true 按照...

Lucene系列 分析器

搜尋的基礎是對文字資訊進行分析,lucene的分析工具在org.apache.lucene.analysis包中。分析器負責對文字進行分詞 語言處理得到詞條,建索引和搜尋的時候都需要用到分析器,兩者應當是同乙個,否則沒法很好的匹配。lucene的分析器往往包括乙個分詞器 tokenizer 和多個過...