后端程序员之路 33、Index搜索引擎实现分析2-对外接口和大体流程

# index_manager的单例是index server对外的唯一接口,part_indexer是index搜索的核心部分,index_manager持有了一组part_indexer。

typedef std::vector<std::shared_ptr<part_indexer>> part_indexers;
part_indexers _part_indexers;

index_manager.init
- 对incremental和history两种索引从文件或内存进行初始化,过滤超时的文章
- 一条线程 inc_rebuild_thread_handler(含build_inc_index)
- 一条线程 history_rebuild_thread_handler
- n条线程 part_indexer_func

index_manager.get_size,累加_part_indexers的get_size
index_manager.get_item,_part_indexers[doc_id%_index_part_num].get_item

index_manager.trigger
- 填充search_params,调用main_trigger
- main_trigger里构造partition_task_t,丢到_query_tasks_queue处理
- 等结果

part_indexer_func
- 从_query_tasks_queue获取partition_task_t,执行查询任务
- _part_indexers[task.index_part_id]->search() (task.index_part_id是main_trigger里写的随机值)

# inc_reader,用于向index server添加新数据
- util::BlockingQueue<ITEM>* _buffer,_file_buffer; gmp_cache_t _gmp_cache;
- dump_data
    - detach a thread to dump data
    - pthread_create dump_thread_handler
- inc_data
    - _file_buffer->push( item );
    - if (item.build_inc()) _buffer->push( item );
- inc_gmp
    _gmp_cache.insert
- get_datas
    - take data from _buffer
- get_gmp_cache
    - _gmp_cache.swap(gmp_cache)
    - used by history_rebuild_thread_handler
- copy_gmp_cache
    - gmp_cache.insert(_gmp_cache.begin(), _gmp_cache.end());
    - used by inc_rebuild_thread_handler
- dump_thread_handler
    - take item from _file_buffer
    - items.SerializeToString save to file

转载于:https://www.cnblogs.com/zapline/p/6692641.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值