美文网首页
Elasticsearch随笔

Elasticsearch随笔

作者: 王司技术谈 | 来源:发表于2020-04-16 14:45 被阅读0次

    什么是ElasticSearch

    官方定义是ElasticSearch是一个基于Lucene library的分布式搜索引擎。ElasticSearch的开发者Shay Banon,最开始创建ElasticSearch的目的就是提供一个分布式的搜索解决方案。随着ES的发展,ES功能越来越丰富,ES应用越来越广泛,ES在很多场景下实际被作为一种数据库存储方案,实现数据库存储功能,将其理解为带有强大搜索功能和快速读取功能的高可用分布式文档型非关系型数据库(nosql)更为全面,非关系型数据库有很多种,采用ES作为解决方案的往往看重其强大的查询分析和全文搜索能力。

    ES与Lucene关系

    Lucene是目前最为流行和成熟的搜索库,提供了核心的index和search功能,但是只是对开发人员提供了接口,没有提供终端使用的接口,并且只是一个单机的本地解决方案。ElasticSearch基于Lucene并且对Lucene提供了丰富的扩展,ES 为Lucene提供了分布式,高可用解决方案,实现了 数据高可用(数据备份与恢复,数据多节点备份)服务高可用(分布式,避免单机故障,提供故障恢复功能),并且提供了基于restful的json的接口方便数据的查询和索引。

    分布式存储和查询

    ES index 是一个逻辑概念,由多个node上的多个分片构成,用户针对某个index数据存储并不是只存储在一个node上,实际会被路由到不同node节点,而是查询时将不同node数据汇总返回给用户,可以简单理解为,关系型数据库水平分表。

    对ES的分布式查询可以简单理解为一个函数式编程map-reduce过程。用户发出search请求给某个节点,该节点将请求广播给不同的data node,data node接到请求后在相应的分片进行查询操作(相当于map过程),然后将各个节点的查询结果发送到到协调节点进行排序聚合等操作(相当于reduce 过程)

    分布式存储和分布式查询对终端用户来说是透明的,但是如果需要做性能调优需要对这些深层概念做一些了解是很有帮助的

    分布式使得在大数据量面前可以通过分片降低每个分片的检索规模、存储规模,并且可以并行检索来提升检索效率。

    基于关系型数据库的ES使用方案

    ES 处理领域模型对象之间复杂关系并不擅长,而关系型数据库对领域模型对象的抽象建模相对方便和成熟,ORM建模目前已经很成熟。结合关系型数据库领域建模的优点,利用 ES 查询速度快、查询分析功能强大的特点,可以将ES作为数据缓存和数据查询接口使用。先将重要的数据写入关系数据库,然后再索引到ES中,查询操作相关接口直接hit到ES中,将查询压力放在ES这个缓存(代理)中,既利用了ES强大的查询功能,又结合了关系型数据库的可靠性和丰富的数据描述能力。使用的数据场景是应用场景是读多写少。这种方案的核心思想是将ES看成广义的缓存和查询代理。

    ES删除与查询原理及对应性能优化方案

    ES读取效率很高,但插入和删除会影响ES的查询效率,查询和写入的主体segment是不可变的,删除并不是真正的删除,而是在.del文件插入一条删除记录,在实际查询中过滤掉del文件中删除记录再返回给用户,实际等于求segment del文两者的交集,增加了查询的负担。在ES(Lucene)中没有真正的更新操作,更新是由删除和新建两个操作构成。

    ES中删除的数据只有在段合并的时候才能真正的物理删除,但是段合并是一个特别耗时的操作,要谨慎操作。比较好的做法是按照时间或者某种业务逻辑将不同类型的数据分index存储,当达到一定条件直接删除(冷冻)对应index,比如logs日志按照天分索引,超过15天自动删除对应索引。多索引方案使得查询定义更加方便灵活,同时删除和查询影响的范围变小了(只是某个index受到影响),merge时也更加方便了,可以分时段分业务具体定义merge策略。

    Lucene index 与ES分片的关系

    lucence index 是实际存在的文件,其中包含多个segment段文件,segment是实际写入和查询的主体,index提供实际的读写接口。
    一个ES分片,相当于一个完整Lucene index,包含完整的lucence引擎。ES实际上是将分布在不同的node不同Lucene实例(分片)统一协调管理,实现分布式存储和查询,提供更方便的存储和查询接口,提供功能扩展如(agg查询),提供容错性管理,故障恢复等分布式系统通常提供的服务,提供方便的api 监控群集状态,提供镜像恢复机制,提供负载均衡机制。

    ES高可用实现方案

    ES实现了自己的一套一致性算法(当时raft算法还没出现),虽然在部分场景会有缺陷,但是在实际使用中表现和强大,ES的一致性算法目前看在往raft(paxos)算法靠拢,也是通过leader选举机制,数据副本机制,数据同步机制,来保证系统的一致性,高可用性。

    Filter缓存实现

    ES filter缓存并不是缓存整个search,而是针对每个filter生成一个bitset数据结构(简单理解为0, 1 数组),下次有对应filter的查询就不用访问倒排索引了,可以直接访问对应bitset。Lucene 负责计算构建bitSet, ES 通过cache对象来缓存bitSet。

    相关文章

      网友评论

          本文标题:Elasticsearch随笔

          本文链接:https://www.haomeiwen.com/subject/drkzphtx.html