IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> ElasticSearch —— 基础知识汇总 -> 正文阅读

[大数据]ElasticSearch —— 基础知识汇总

一、ElasticSearch介绍

????????一个主要应用于大数据场景下的近实时全文搜索引擎

? ? ? ? 近实时:从添加一个文档到能搜索到这个文档,有一个微小的延迟(通常是1s)。

二、ES核心 —— 倒排索引

????????倒排索引是类似于哈希表一样的数据结构,完成由词条到文档id的映射。可以根据搜索词条快速找到该词条对应的所有文档id,然后根据id直接获取文档。

三、基础概念

(一)集群

????????一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。

green所有主分片和副分片都可用
yellow所有主分片可用,但不是所有副分片都可用
red不是所有的主分片都可用

????????普通集群:master处理写请求,master、slave都可以处理读请求

????????es集群:master负责集群的分片管理,写请求由主分片处理,读请求主分片、副分片都可以处理。

(二)节点(Node)

????????集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引和搜索功能。

(三)索引(Index)

????????逻辑概念,包括配置信息mapping和倒排正排数据文件,一个索引的数据文件可能会分布于一台机器,也有可能分布于多台机器。索引的另外一层意思是倒排索引文件。

(四)文档

????????一个可被索引的基础信息单元,以JSON格式来表示。

(五)分片(Shard)

????????为了支持更大量的数据,索引一般会分成多个部分,每个部分就是一个分片,分片被节点管理。一个节点一般会管理多个分片,这些分片可能是属于同一份索引,也有可能属于不同索引,但是为了可靠性和可用性,同一个索引的分片尽量会分布在不同节点上。

????????分片有两种,主分片副本分片

????????副本(Replica):一个分片(Shard)的备份数据,一个分片可能会有0个或多个副本,这些副本中的数据保证强一致或最终一致。
??????? 默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝),这样的话每个索引总共就有10个分片。

四、文档的写入过程

  1. 客户端向es集群发送文档写请求
  2. 集群的某个节点接收到请求,通过路由算法确定该文档所属的主分片,将请求转发给该主分片所在节点
  3. 主分片执行写请求,成功后将请求同时转发给多个对应副分片所在节点
  4. 副本分片执行请求,将执行结果通知主分片所在节点
  5. 如果所有副分片都执行(同步)成功,主分片节点通知接受请求的接待您操作成功,接收请求的节点向客户端返回操作成功

????????只要有副本在,写入延时最小也是两次单Shard的写入时延总和,写入效率会较低,但是这样的好处也很明显,避免写入后,单机或磁盘故障导致数据丢失,在数据重要性和性能方面,一般都是优先选择数据,除非一些允许丢数据的特殊场景。

????????路由算法:

????????Index Request中可以设置使用哪个Filed的值作为路由参数,如果没有设置,则使用Mapping中的配置,如果mapping中也没有配置,则使用_id作为路由参数,然后通过_routing的Hash值选择出Shard(在OperationRouting类中),最后从集群的Meta中找出出该Shard的Primary节点。

五、文档的读取过程

? ? ? ? 集群的某个节点接收到读取请求,根据路由算法确定文档所在分片的节点列表,再根据负载均衡算法(默认轮询)确定转发给其中的某个节点,分片所在节点将数据返回给接收到请求的节点,接收到请求的节点将数据返回给客户端。

????????查询的时候需要查询所有Shard,同一个Shard的Primary和Replica选择一个即可,查询请求会分发给所有Shard,每个Shard中都是一个独立的查询引擎,比如需要返回Top 10的结果,那么每个Shard都会查询并且返回Top 10的结果,然后在Client Node里面会接收所有Shard的结果,然后通过优先级队列二次排序,选择出Top 10的结果返回给用户。

????????这里有一个问题就是请求膨胀,用户的一个搜索请求在Elasticsearch内部会变成Shard个请求,这里有个优化点,虽然是Shard个请求,但是这个Shard个数不一定要是当前Index中的Shard个数,只要是当前查询相关的Shard即可,这个需要基于业务和请求内容优化,通过这种方式可以优化请求膨胀数。

六、es中的乐观锁

????????悲观锁:每次操作时都认为别?会修改数据,所以操作时会先加锁。eg. 关系数据库的行锁、表锁,都是在做操作之前先上锁。
????????乐观锁:每次操作时都认为别?不会修改数据,不上锁,但提交更新时会检测操作期间数据是否已被修改。
????????悲观锁适合写多读少、并发量小的场景,乐观锁适合读多写少、并发量大的场景。

????????es读多写少,常使用乐观锁解决并发问题,使用乐观锁也可以提?系统吞吐量。

七、常用分词器

????????Standard Analyzer:
????????标准分词器,也是ES的默认分词器,按词切分,小写处理,默认停用词默认是关闭的。

????????Keyword Analyzer:
????????不分词,直接将输入的文档当做一个词输出。

八、优化建议

  • 一般情况下一个shard维护5千万到2亿数据即可
  • 不要把ES当数据库用,ES只存索引字段和排序字段
  • 禁用模糊查询和正则匹配,禁用深度分页
  • 深度分页考虑searchAfter SearchScroll
  • 不需要范围查询的字段,改为keyword
  • 全量索引时关闭副本
  • 全量新建索引,通过别名指向新索引,后删除老索引
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 12:28:56  更:2021-08-11 12:30:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 13:00:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码