| |
|
开发:
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直接获取文档。 三、基础概念(一)集群????????一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。
????????普通集群:master处理写请求,master、slave都可以处理读请求 ????????es集群:master负责集群的分片管理,写请求由主分片处理,读请求主分片、副分片都可以处理。 (二)节点(Node)????????集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引和搜索功能。 (三)索引(Index)????????逻辑概念,包括配置信息mapping和倒排正排数据文件,一个索引的数据文件可能会分布于一台机器,也有可能分布于多台机器。索引的另外一层意思是倒排索引文件。 (四)文档????????一个可被索引的基础信息单元,以JSON格式来表示。 (五)分片(Shard)????????为了支持更大量的数据,索引一般会分成多个部分,每个部分就是一个分片,分片被节点管理。一个节点一般会管理多个分片,这些分片可能是属于同一份索引,也有可能属于不同索引,但是为了可靠性和可用性,同一个索引的分片尽量会分布在不同节点上。 ????????分片有两种,主分片和副本分片。 ????????副本(Replica):一个分片(Shard)的备份数据,一个分片可能会有0个或多个副本,这些副本中的数据保证强一致或最终一致。 四、文档的写入过程
????????只要有副本在,写入延时最小也是两次单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: ????????Keyword Analyzer: 八、优化建议
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |