Solr 千亿级海量数据检索

de521

贡献于2014-08-09

字数:0 关键词: Solr 搜索引擎

Solr Community of China © Copyright www.solr.cc 全国妖防组 chenyi@solr.cc 2013年11月16日晚8点 千亿级海量数据检索 关注微信获知最新活动 Solr Community of China www.solr.cc 背景 . 场景  每小时1亿条数据  单条大小200Byte  数据保留100天 . 基本需求  100%召回率  关键字检索  时间排序 . 挑战  实时产生数据,平均每秒4万条  延迟不得超过10分钟  100用户在线,80%请求1s内响应  机器数量最好控制在50台左右 Solr Community of China www.solr.cc 基本思路 . 影响索引性能的因素  索引数据大小  索引记录条数 . 研究关注重点  索引  检索  存储  分布式 Solr Community of China www.solr.cc 总体架构上我们更偏重于性能优化 偏向性能 偏向功能 Solr Community of China www.solr.cc 不论搜还是索,都要经过分词这个过程,因此从这入手 1 四川省发生地震 2 河南省出现旱灾 id content 从分词入手“XX省”是1个词还是2个词? 四川省/发生/地震 河南省/出现/旱灾 四川/省/发生/地震 河南/省/出现/旱灾 term freq docid 四川省 1 1 河南省 1 2 发生 1 1 出现 1 2 地震 1 1 term freq docid 四川 1 1 河南 1 2 省 2 1,2 发生 1 1 出现 1 2 地震 1 1 旱灾 1 2 常用算法和策略  正向匹配  反向匹配  全匹配  最少切分  最短路径  最大概率 Solr Community of China www.solr.cc 粗略的切分可能导致检索无法召回,细致的切分可能导致性能下降 term freq 四川省 1kw 河南省 1kw 发生 1kw 出现 1kw 地震 1kw 旱灾 1kw term freq 四川 1kw 河南 1kw 省 2kw 发生 1kw 出现 1kw 地震 1kw 旱灾 1kw 四川 + 地震 Query NotFound 四川 + 省 + 地震 Query Loop(四川)-> Loop(省)-> Loop(地震) 随机读且O(n) Solr Community of China www.solr.cc 全切分可以很好解决拉链问题,但字典会很大 term freq docid 四川 1 1 四川省 1 1 河南 1 2 河南省 1 2 发生 1 1 出现 1 2 地震 1 1 旱灾 1 2 四川 + 地震 / 四川省 + 地震 Query FeelWell 字典庞大 索引庞大 bitset term number 4-8byte 4byte 1bit 压缩后理论上一亿个词12.5M Byte空间 抛弃传统字典树数据结构,改用BitSet Solr Community of China www.solr.cc 最终结论核心思想是缩短拉链 The Day You Went Away The Video Dept The New World Orchestra The Wanderer The Black Eyed Peas The Day->1 The Video->1 The New->1 The Wanderer->1 The Black->1 The->5 Solr Community of China www.solr.cc 缓存也是降低资源使用的有利手段,但是内存非常有限 Memcache有单个对象大小限制,所以不用。 BerkeleyDB 高速K-V系统 具备持久化功能 拥有一层可配置内存Cache 顺序读写 EhCache 高效Cache框架 多种Cache存储方式 策略完善 Solr Community of China www.solr.cc 段 在缓存不命中时要减少不必要的磁盘扫描 倒排索引 正排记录 跳表 正排索引 BloomFilter 一个段内检索过程 过滤未命中的段 IndexReader 段1 BloomFilter 段2 IndexReader BloomFilter 段n Solr Community of China www.solr.cc 还可以通过改变读取的方式减少磁盘扫描 id age name 100 18 张三 101 18 李四 term docid field 18 1,2 Age 张三 1 Name 李四 2 Name 100 1 Id 101 2 Id 原始数据 倒排索引 docid age 1 18 2 18 docid name 1 张三 2 李四 3 王五 docid Id 1 100 2 101 Solr Community of China www.solr.cc Hadoop建立索引 IndexWriter FSDirectory Move Index to HDFS IndexWriter RAMDirectory HDFSDirectory FSDirectoryDownload Index Solr Master Solr Cloud 单机一小时(至少)索引1.2亿条记录,总共54GB。 传统方法消耗较多磁盘IO 改进后可在SATA盘上轻松完成 Solr Community of China www.solr.cc 多线程提升速度不大,多Node提升也并不多 SolrJ SolrJ SolrJ Collection SolrJ SolrJ SolrJ Collection Collection Node Node Node Solr Community of China www.solr.cc Collection Collection Node Node 透过Collection可以大大提升索引速度 SolrJ SolrJ Shard Shard Shard Shard Solr Community of China www.solr.cc 分片1 第1天 第2天 第3天 业务1 业务2 业务3 Collection1 Collection2 CollectionN 分片2 分片3 分片4 分片5 分片6 分片7 分片8 分片9 Solr Community of China www.solr.cc 还有一些其它策略可以参考 . 时间分区 . 排序字段压缩 . DocValue . FlashCache . 降低CPU核数,提高主频 Solr Community of China © Copyright www.solr.cc Thanks 官方网址:www.solr.cc 联系我们:support@solr.cc 答疑QQ群:187670960 微信频道:solrcn 关注微信获知最新活动

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 3 人已下载

下载文档

相关文档