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 和多個過...