Elasticsearch实用技能

使用场景

记录和日志分析:ELK是现在互联网公司的标配,es ,logstash,kibana
全文搜索:可以依据es的倒排索引,以及es的多分片,可以极大提高读数据和检索数据的速度
海量数据分析: es拥有强大的聚合计算函数
总结:都是借助es的强大读写能力,写入和读出速度快,极大提高了实时性,也就造就了大数据量必须要使用es场景

基本概念

1.索引-index:es中对实体进行存储是按照索引维度的,一个索引相当于数据库中的表,用来存储某种固定业务实体
2.映射-mapping: 可以对es的索引存储结构进行定义,比如索引存储的文档每个字段类型,是不是keyword等
3.文档-document: es索引中每个文档就是对用数据库的一行记录
4.倒排索引: es对于文档的存储是使用倒排索引的,每个数据写入前,先使用分词器进行分词,然后加入到倒排索引中,这个对于全文检索非常重要,是全文检索功能的核心体现
5.分片-shard: es每个索引存储在多个分片上的,分片又分为主分片和副分片,主分片负责读写,副分片负责读
6.集群-cluster: es是分布式存储中间件,是可以集群部署的,分为主节点和数据节点

整体架构

  1. es是分布式集群的,有多个节点,节点分为master节点和普通node
  2. master节点负责索引元数据的管理,切换主分片和备份分片的身份,普通node专门负责数据的读写
  3. 一个索引的创建,可以指定分片数量,每个分片又分为主分片和副分片
  4. 主分片可以进行读写数据,副分片只能支持读,意味着,检索一个索引,可以根据分片数量扩大(类似于mysql分表,但是mysql分表也还是单机实例,性能还是比不了),来急剧提高es的读写性能,这也是es作为分布式存储中间件的巨大优势。

写入数据的原理

  1. 当客户端需要写入某个索引某条数据时候,因为一个索引是多个分片构成的,所以还不知道需要写入哪个分片
  2. 客户先随机访问一个节点,这个被访问的又叫协调节点,会根据文档id计算hash取模,计算应该写入分片,然后再得到这个分片的主分片节点
  3. 主分片写入成功后,会同步给副分片(可以配置是否需要全部同步),然后响应客户端成功

consistency有三个可选值:
one:只要有1个primary shard是可用的,就可以进行写操作
all:必须所有的primary shard和replica shard都是可用的,才可以进行写操作
quorum:默认值。要求所有的shard中,必须大部分shard都是可用的,才可以进行写操作

底层写入逻辑

1.通过客户端写入的数据先缓存在memory buffer,在没有refresh到segment文件之前,这个数据是还没正式生效的,refresh间隔时间是一秒,所以一般数据是有一秒的延迟的
2.同时也会写入translog buffer中,这个会后面同步到translog进行持久化,这个是用来进行断电恢复的日志,相当于mysql的redo log
3.第二阶段就是refresh- memory buffer写入文件系统生成segment, 同步 translog buffer到translog中进行持久化

解决refresh导致一秒延迟的问题
可以在插入的时候,手动进行refresh,这样就会马上生成segment

删除/更新数据逻辑

1.删除数据的时候,在es地层有个.del文件,会记录这个数据id,当检索的时候,将检索结果把.del文件的文档去除再做返回
2.更新数据的时候,就是先走上面删除逻辑,然后再插入一条新的

搜索数据的原理

1.当客户输入搜索关键字后,先随机发送到一台机器上,也就是协调节点上,协调节点会将请求分送到所有分片上,每个分片随机取一个分片副本(可以是主分片)
2.分片根据搜索关键字进行分词,使用倒排索引找出搜索到数据的id,然后返回给协调节点
3.协调节点根据id进行hash计算,获取数据所在分片,然后去分片取数据进行返回

数据不一致性问题
1.由于分片分为主分片和副分片,主分片可读可写,副分片是同步主分片数据,可能导致读数据读到的副本还没来得及同步
2,可以通过在写入的时候设置consistency或者wait_for_active_shards来控制

重建索引场景

  1. 当写数据受到瓶颈的时候,需要扩展主分片的场景(具体原因和集群架构,已经写入数据hash一致性算法原理有关)
  2. 需要精确匹配、排序、聚合和过滤的场景 ,某些字段必须设置为keyword,那么需要重建索引,修改mapping

主从分片数据不一致怎么办

可以参考es数据原理,通过写入设置一定策略来解决

聚合必须要用keyword怎么办

可以参考es重建索引场景来解决

  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值