- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Caprice:Golang版的⾼性能实时全⽂检索引擎
承接前⽂ 如何构建实时全⽂检索引擎,这⾥主要回顾我们如何打造⾼性能的实时全⽂检索引擎。当然这个项⽬还在持续开发优化中。
Caprice是在开源的全⽂检索引擎bleve的基础上,对存储层进⾏深度改造,进⽽获得⾼性能。同时更为重要的是,这款检索引擎是⽀持实时检索
和⾮实时检索。
这⾥再简单介绍⼀下bleve,Bleve是⼀个由Couchbase团队基于Go语⾔开发的索引/检索库,它⽀持常⽤的检索和索引功能,如索引、检索、过
滤、排序、聚合、⾼亮等。Bleve包括常见的⽂本分析组件,且能够使⽤现有的K/V存储系统进⾏存储。Bleve具有以下主要特性:
1. ⽀持所有Go数据结构的索引,如JSON 、结构体、Slices、字符串等
2. 具有强⼤、智能的配置功能
3. 具有丰富的Field类型,如⽂本、数字、⽇期等
4. 具有丰富查询类型,如Term、短语、模糊/精确匹配、前缀、逻辑与(Conjunction)、逻辑或(Disjunction)、布尔(Boolean)、数字
范围、⽇期范围等查询
5. 具有简单的查询语法,且能够实现复杂的查询
6. 具有丰富的接⼝,且能够实现功能扩展
7. 具有易⽤且⾼级API能够索引数据模型中的任何对象
8. 基于标准的TF-IDF加权评分算法
9. ⽀持查询匹配结果的⾼亮显⽰
10. ⽀持多种聚合功能(Facet),如能够根据Term、数字范围、⽇期范围聚合等
11. ⽂本解析组件现已⽀持众多分析组件,⽀持将近⼆⼗种语⾔,如丹麦语、荷兰语、英国、法语、德语、泰语、⼟⽿其语等
bleve底层有两个检索引擎:upsidedown和scorch。这两个引擎我曾在之前的⽂章中均有介绍。upsidown是以KV的⽅式存储倒排索
引,scorch是以segment的⽅式,以FST存储倒排索引。⽬前upsidown基本上不会再新增新的特性,只修复bug。
总体上来说,bleve存在如下缺点 :
1. 写吞吐很差。upsidown的写吞吐⼤约是2000+ (document⼤⼩不同,测试数据不同)。scorch的写吞吐就更差了,只有100+。同时写的
吞吐不稳定,抖动很明显。
2. 对docvalues⽀持的很差,存在⼤量的多余数据,导致存储臃肿。
3. 对聚合⽀持很有限。
4. 磁盘压缩效率低下,占⽤磁盘空间⼤
5. 不⽀持filter,仅⽀持query
6. 不⽀持document的version。
具体到底层存储,吐槽⼀下。
upsidedown :对数字的倒排存储查询效率很低,原因在于为了⽀持数字的range query,bleve参考lucene早期版本的做法,采⽤前缀编码的
⽅式处理了数字,⼤致的结果就是会产⽣⼀系列不同前缀的term,举例说明 :⼀个数字123,它会分解成 1 (2),12 (1),123 (0),括号
中的数字就是前缀码,这样 1 (2)和1 (0)是不⼀样的。数字的range query的时候,会找到公共的前缀term,⽐如198 ~ 301, 那么只需要
term 198 (0),199 (0),2 (2),300 (1), 301 (0)即可完成范围查找。但是如果是⼀个范围⽐较⼤的range query,中间的公共前
缀term包含的docID列表就会很⼤,对于upsidedown,所有的倒排索引都是以kv的⽅式存储的,这样这个前缀查询就会遍历⼤量的冗余的kv造
成查询性能下降。
upsidedown的另⼀个⼤问题就是写吞吐很不稳定,因为底层采⽤kv存储,很多的kv存储引擎都是LSM架构,导致compaction严重消耗CPU和
磁盘IO,导致写吞吐不稳定。另⼀⽅⾯upsidedown再设计term count的时候依赖kv提供的merge接⼝,这个接⼝基本上lock当下的写,这样导
致写的性能不能提升。
scorch :scorch的整体设计思路是借鉴了lucene的设计,采⽤segment的⽅式保存倒排索引,但是bleve的索引的定位是实时检索,导致
scorch必须是每次写提交都要⽴即⽣成⼀个segment,尽管这个segment只包含⼀个⽂档,然后后台不断merge这些⼩的segment。scorch
的写逻辑,⽼实讲我没有特别看懂,⾄少代码逻辑很不清晰,最致命的是它的吞吐太低了,只有100+,并且会因为merge⽽出现卡顿(⼤约2秒
钟,程序设定),这严重不能接受。scorch中stored field,docvalue,term dict存储在⼀个⽂件中,整个写segment的逻辑复
您可能关注的文档
- 特种设备操作证查询.pdf
- 富饶的西沙群岛(4).pdf
- 注塑模具验收标准规范.pdf
- 最新2021成人高考作文范文1000字三篇.pdf
- 《夸父逐日》课后巩固练习题及答案解析.pdf
- 九年级道德与法治上册第三单元与大自然和谐共生第6课关爱自然善待自然第2框《做大自然的朋友.pdf
- EasyCode4420工业级条码打印机说明书.pdf
- 浅论抽象艺术在现代艺术中的发展历程及发展趋势.pdf
- 2021年注册会计师考试--长期股权投资初始计量_create.pdf
- 浙教版九年级科学目录.pdf
- 综合解析苏科版八年级物理上册《物体的运动》难点解析试卷(详解版).docx
- 综合解析苏科版九年级物理上册《简单机械和功》定向训练试卷.docx
- 综合解析苏科版九年级物理上册《简单机械和功》定向攻克试题(含详细解析).docx
- 综合解析苏科版九年级物理上册《简单机械和功》同步测评试卷(含答案解析).docx
- 综合解析苏科版九年级物理上册《简单机械和功》定向测评试卷(详解版).docx
- 综合解析苏科版九年级物理上册《简单机械和功》定向测评试题(含详解).docx
- 综合解析苏科版九年级物理上册《简单机械和功》同步测评试卷(含答案详解).docx
- 小学生预防雷电-完整版PPT公开课件.pptx
- 初中化学课标知识点归纳总结.docx
- 综合解析苏科版九年级物理上册《简单机械和功》定向测试试题(含详细解析).docx
文档评论(0)