索引表載入策略配置
索引表的載入策略配置由多個索引檔案的載入策略組成,每個策略描述了一組索引檔案的具體載入方式。索引表在載入時,針對每個索引檔案,從上到下依次匹配策略規則,優先使用第一個匹配的策略載入索引檔案。
配置樣本
{
"load_config":[
{
"file_patterns":[
"_ATTRIBUTE_",
"/index/title/.*",
"/index/body/dictionary"
],
"load_strategy":"mmap",
"lifecycle":"hot",
"load_strategy_param":{
"lock":true,
"partial_lock":true,
"advise_random":false,
"slice":4194304,
"interval":2
},
"remote" : false,
"deploy" : true,
"warmup_strategy":"sequential"
},
{
"file_patterns":[
"_SUMMARY_"
],
"load_strategy":"cache",
"load_strategy_param":{
"global_cache":false,
"direct_io":true,
"cache_size":4096
},
"remote" : true,
"deploy" : false
},
{
"warmup_strategy":"none",
"file_patterns":[
".*"
],
"load_strategy":"mmap",
"load_strategy_param":{
"lock":false
}
}
]
}參數詳解
file_patterns:索引檔案匹配模式,使用Regex。索引表的目錄結構請參考索引檔案目錄結構,匹配模式是相對於segment目錄的檔案名稱的正則表示,比如要對倒排索引title設定獨立的載入策略,title索引的匹配模式正則表示為"/index/title/.*"(索引名為title,所以在index目錄中存在title索引目錄,對其下的所有檔案都需要匹配使用.*表示)。系統提供了一些內建的宏定義來簡化索引檔案匹配的設定:
_ATTRIBUTE_:等價於"/attribute/.*",表示所有的正排索引。
_INDEX_:等價於"/index/.*",表示所有的倒排索引。
_SUMMARY_:等價於"/summary/",表示所有的摘要索引。
load_strategy:載入策略,主要有mmap、cache兩種模式。
load_strategy_param:載入策略參數。
mmap載入策略參數
lock:mmap是否採用lock模式,預設為false。lock模式會將索引載入到記憶體不會換出,查詢效能較好,但是記憶體開銷較大。
partial_lock:是否對倒排索引採用部分lock,預設為false。部分lock會將倒排的一級詞典lock進記憶體,二級詞典不lock,以節省記憶體。
advise_random:mmap時會減少對磁碟的預讀行為,預設為false。對於索引過大,並不能全部load進記憶體的情境,查詢時磁碟IO往往會成為效能瓶頸,配置 true 該項後能顯著減少對磁碟的讀取量,提升查詢效能。
slice和interval:控制預熱載入索引的速度,每讀取 slice 大小就sleep interval 大小的時間,slice單位:B,interval 單位:ms。slice 和 interval 必須同時配置。slice預設 4MB,interval 預設 0(不限速)。
cache載入策略參數
direct_io: 是否使用DirectIO方式讀取檔案,預設 false。DirectIO模式讀取ssd盤中的資料,效能更好。
global_cache: 是否使用全域的BlockCache,預設 false。全域的BlockCache的大小是通過環境變數進行設定,目前還未開放,建議設定為false。
cache_size: global_cache為false時有效,配置BlockCache大小,單位:MB,預設 1MB。
block_size: 配置 Block 大小,單位:B,預設 4096B。
remote:與file_patterns匹配的索引檔案是否從遠端分布式儲存系統中讀取,true/false。只有need_read_remote_index設定為true時,remote才會起作用,need_read_remote_index設定為false時,remote會強制設定為false。
deploy:與file_patterns匹配的索引檔案是否需要分發到本地,true/false。只有need_deploy_index設定為true時,deploy才會起作用,need_deploy_index設定為false時,deploy會強制設定為false。
warmup_strategy:預熱策略,目前僅對 mmap 載入策略有效,預設為none(不預熱)。如果需要預熱請設定為sequential,表示順序讀取預熱。
使用樣本
mmap策略樣本
{
"load_config":[
{
"file_patterns":[
"/attribute/price/.*", #屬性欄位price
"/index/title/.*", #倒排索引title
"/index/body/dictionary", #倒排索引body的詞典
"/index/vector/aitheta.*" #向量索引vector
],
"load_strategy":"mmap",
"load_strategy_param":{
"lock":true, #mmap lock模式
"partial_lock":true, #部分lock,倒排索引詞典只lock一級詞典
"slice":4194304, #預熱時,一次讀取4M,每次間隔2ms
"interval":2
},
"remote" : false, #不訪問遠端
"deploy" : true, #索引下發到本地
"warmup_strategy":"sequential" #順序預熱
},
{
"file_patterns":[
"/attribute/tags", #屬性欄位tag
"/index/倒排索引description/.*" #倒排索引description
],
"load_strategy":"mmap",
"load_strategy_param":{
"lock":false,
},
"remote" : false,
"deploy" : true,
"warmup_strategy":"none"
}
]
}cache策略樣本
{
"load_config":[
{
"file_patterns":[
"_ATTRIBUTE_" #所有屬性欄位
],
"load_strategy":"cache",
"load_strategy_param":{
"global_cache":false, #不使用全域cache
"direct_io":true, #DirectIO方式讀取檔案
"cache_size":20480 #cache大小為20G
},
"remote" : false, #不訪問遠端
"deploy" : true #索引下發到本地
},
{
"file_patterns":[
"/summary/data" #摘要索引的data檔案
],
"load_strategy":"cache",
"load_strategy_param":{
"global_cache":false,
"direct_io":true,
"cache_size":4096
},
"remote" : false,
"deploy" : true
},
{
"warmup_strategy":"none",
"file_patterns":[
".*"
],
"load_strategy":"mmap",
"load_strategy_param":{
"lock":false
}
}
]
}儲存計算分離
#儲存計算分離需要設定need_read_remote_index為true
{
"load_config":[
{
"file_patterns":[
"/index/title/.*" #倒排索引title
],
"load_strategy":"mmap",
"load_strategy_param":{
"lock":true, #mmap lock模式
"partial_lock":true, #部分lock,倒排索引詞典只lock一級詞典
"slice":4194304, #預熱時,一次讀取4M,每次間隔2ms
"interval":2
},
"remote" : false, #不訪問遠端
"deploy" : true, #索引下發到本地
"warmup_strategy":"sequential" #順序預熱
},
{
"file_patterns":[
"_ATTRIBUTE_" #所有屬性欄位
],
"load_strategy":"cache",
"load_strategy_param":{
"global_cache":false, #不使用全域cache
"direct_io":true, #DirectIO方式讀取檔案
"cache_size":20480 #cache大小為20G
},
"remote" : true, #訪問遠端儲存
"deploy" : false #索引不用下發到本地
},
{
"file_patterns":[
"/summary/data" #摘要索引的data檔案
],
"load_strategy":"cache",
"load_strategy_param":{
"global_cache":false,
"direct_io":true,
"cache_size":4096
},
"remote" : true, #訪問遠端儲存
"deploy" : false #索引不用下發到本地
},
{
"warmup_strategy":"none",
"file_patterns":[
".*"
],
"load_strategy":"mmap",
"load_strategy_param":{
"lock":false
}
}
]
}索引檔案目錄結構
|-- generation_0
|-- partition_0_65535
|-- index_format_version
|-- index_partition_meta
|-- schema.json
|-- segment_0
|-- attribute
`--attribute_name
`--data
|-- deletionmap
|-- deploy_index
|-- index
`--index_name
|-- bitmap_dictionary
|-- bitmap_posting
|-- dictionary
`-- posting
`--vector_index_name
|-- aitheta.index
|-- aitheta.index.addr
|-- summary
|-- data
|-- offset
`-- segment_info
|-- adaptive_bitmap__meta
|--deploy_index
|--dictionary_name
|-- truncate_meta
|-- deploy_index
`-- truncate_meta_file
`-- version.0名稱 | 說明 |
generation | generation_x是引擎區分不同版本全量索引的標識。 |
partition | partition是searcher載入索引的基本單位。如果一個partition中資料過多,會導致searcher效能降低。線上資料一般通過劃分多個partition的方式來保證每個searcher的檢索效率。 |
segment | segment是索引組成的基本單位。segment中包含了文檔的倒排和正排結構。index builder每次dump都會產生一個segment。多個segment可以通過merge策略進行合并。一個partition中可用的segment在version檔案中指明。 |
index | 倒排索引的基本單位。 |
attribute | 正排索引的基本單位。 |
deletionmap | 刪除的doc記錄。 |
index_format_version | 索引的版本資訊。用於檢查索引檔案是否符合binary要求。 |
index_partition_meta | 儲存了全域排序的資訊。包括排序欄位和升降序。 |
schema.json | 索引設定檔。主要記錄fields,index, attribute 和summary等資訊。引擎通過該檔案來載入索引。 |
version.0 | version檔案。主要記錄當前partition中引擎需要載入的segment和最新doc的時間戳記。在即時build中,引擎會根據增量version的時間戳記過濾舊的原始文檔。 |
segment_info | segment資訊摘要。記錄了當前segment中文檔數目,當前segment是否merge過,locator資訊和最新doc時間戳記資訊。 |
dictionary | 倒排索引的詞典 |
posting | 倒排索引的倒排鏈檔案 |
bitmap_dictionary | 如果開啟了bitmap高頻詞功能,該檔案表示bitmap高頻詞詞典。 |
bitmap_posting | 如果開啟了bitmap高頻詞功能,該檔案表示bitmap高頻詞對應的倒排鏈。 |
aitheta.index | 向量索引檔案 |
aitheta.index.addr | 向量索引meta資訊 |