索引表加載策略配置
索引表的加載策略配置由多個索引文件的加載策略組成,每個策略描述了一組索引文件的具體加載方式。索引表在加載時,針對每個索引文件,從上到下依次匹配策略規則,優先使用第一個匹配的策略加載索引文件。
配置示例
{
"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:索引文件匹配模式,使用正則表達式。索引表的目錄結構請參考索引文件目錄結構,匹配模式是相對于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信息 |