ElasticSearch面试题总结

本篇文章会将ElasticSearch简写为ES

1、为什么要使用ElasticSearch

系统中的数据随着业务的扩展,时间的推移会变得越来越多,如果对某个关键词进行模糊查询,传统的数据库就会放弃索引,进行全表查询,这样会导致效率特别低。ElasticSearch支持全文检索,对关键词和文档内容建立了倒排索引,可以快速查询到所需的内容。

2、ElasticsSearch和MySQL的区别

  • 类型:ES属于非关系型数据库,擅长存储非结构化数据,而MySQL属于关系型数据库,只能存储结构化数据
  • 存储过程/索引结构:MySQL需要先对表进行设计,提前定义好数据表的结构,建立正排索引;ES比较灵活,可以对Feild字段进行设计,也可以不设计,建立倒排索引
  • 事务支持:Mysql支持事务,ES不支持事务,对修改和删除无法进行回滚
  • 读写方式:Mysql使用聚簇索引和非聚簇索引相结合的方式,如果是聚簇索引找到索引也就找到了数据,如果是非聚簇索引,找到了索引后再根据聚簇索引二次查表,直到找到数据。ES的每个node节点都可以接受request,然后分发到含有该index的节点上,对应的节点经过查询、计算、排序等操作后汇总返回给分发request的节点,由该节点返回给client。每次请求都会轮询地发送到各个节点,防止请求全部打到一个节点。
  • 数据量:对于大数据量简单计算,ES具有绝对的优势,Mysql主要是查询带索引的数据,数据量通常在百万级别以下。

3、ES的查询流程

分为两个阶段:Query then Fetch
第一个阶段是查询:客户端发送查询请求到任意一个节点,此时节点便是协调节点,将请求内容进行处理并计算分片位置后,分发给对应的分片,每个分片在本地进行查询,将结果保存在有序的优先队列中返回给协调节点。
第二个阶段是取数据:协调节点获取到返回的所有数据后,产生一个全局的排序队列,返回给客户端。

4、ES的写入流程

  1. 客户端将数据发送给任意一个节点,此节点作为协调节点,
  2. 通过路由计算得到对应主分片的位置,将数据转发给主分片,主分片将数据写入,然后发送给对应的副本
  3. 副本收到数据后,将数据写入自己的分片,并将响应结果返回给主分片
  4. 主分片收到所有副本的响应结果后,在向客户端返回响应

5、ES目前的检索方式有哪些

  1. 基于DSL检索(常用)
  2. 基于URL检索
  3. 基于SQL检索(不推荐)

6、写入调优

  1. 写入前将副本数设置为0
  2. 写入前禁用刷新
  3. 写入时使用bulk批处理
  4. 尽量使用自动生成的id
  5. 写入后恢复副本数量和刷新间隔

7、ES如何实现master选举

  1. Master节点的选举是由ZenDiscovery负责的,主要包括Ping(发现)和Unicast(记录)两个模块
  2. 对所有可以成为master的节点(node.master:true)按照nodeid的字典顺序排序,每次选举时每个节点将自己知道的节点进行一次排序,选出第一个节点,暂且认为它是master节点
  3. 如果对某个节点的投票树达到一定数量(所有可以成为master的节点数N/2+1),并且它自己也选自己,那么就将该节点设置为master节点,否则重新选举直到满足条件
  4. master节点的主要职责是对集群、节点和索引的管理,不负责文档级别的管理(由node节点管理),data节点可以关闭http功能

8、集群脑裂问题

  • 同一个集群中的不同节点,对于集群的状态有了不一样的理解。
  • 成因:网络延迟,节点负载,内存回收
  • 解决方法:
    • 减少误判:discovery.zen.ping_timeout默认为3s,可以适当调大
    • 选举触发:控制选举行为发生的最小集群主节点数量
    • 角色分离:master节点和data节点分离,限制角色:
      • 主节点配置:node.master:true; node.data:false
      • 数据节点配置:node.master:false; node.data:true
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值