| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 详解最热门搜索引擎——ES -> 正文阅读 |
|
[大数据]详解最热门搜索引擎——ES |
一、产生背景? 互联网发展早期的时候,对于一般的公司储存的数据量不是那么的大,所以很多公司更倾向于使用数据库去存储和查询数据,如:现在去MySQL中查询数据,大概的查询方式就是:select * from table where filed like “%XXX%”或者其他方式,但是,如果我们在查询的时候没有用到或命中数据库建立的索引话,则会扫描整张表,即便是MySQL做过单表查询能力优化,但是他的极限也只在400万左右,且还会经常出现超时现象,让后为了解决这些问题,。很多公司就开始对数据库进行拆分(水平拆分和垂直拆分),这样虽然是解决查询效率的问题,但是也引入了新的问题:1、垂直拆分的话会出现数据库单点故障,先天的主从复制关系,增加了公司的运维成本;2、对表进行拆分的话,增加维护难度和增加公司运维成本;3、即使做了大量的维护,但在大数据的条件下对于数据的检索还是达不到期望的值。随着在业务的不断扩展,数据量的不断膨胀,显然,传统的查询方式已然不能够满足用户的需求,因此就出现了ES这个强大的分布式的,基于RESTful风格的全文搜索引擎。 1、传统方式:2、Es方式:二、应用场景1、作为数据库(代替MySQL);
2、在大数据条件下做检索服务、同义词处理、相关度排名、复杂数据分析、海量数据的近实时处理;3、记录和日志的分析
4、全文检索5、关系型数据库的补充,传统数据库的替代6、站内搜索、垂直搜索
三、基础架构/核心流程1、基本概念:? elasticsearch设计的理念就是分布式搜索引擎,底层实现是基于Lucene的,核心思想是在多态机器上启动多个es进程实例,组成一个es集群。
总结:
2、ES的核心流程:(1)ES的写数据的过程:? ES客户端将一份数据写入primary shard,它会将分成成对的shard分片,并将数据进行复制;Elasticsearch采用多Shard方式,通过配置routing规则将数据分成多个数据子集,每个数据子集提供独立的索引和搜索功能。当写入文档的时候,根据routing规则,将文档发送给特定Shard中建立索引。以这样的方式来实现分布式系统; 每个Index由多个Shard组成,每个Shard有一个主节点和多个副本节点,副本个数可配。但每次写入的时候,写入请求会先根据_routing规则选择发给哪个Shard,Index Request中可以设置使用哪个Filed的值作为路由参数,如果没有设置,则使用Mapping中的配置,如果mapping中也没有配置,则使用_id作为路由参数,然后通过_routing的Hash值选择出Shard(在OperationRouting类中),最后从集群的Meta中找出出该Shard的Primary节点。 ? 请求接着会发送给Primary Shard,在Primary Shard上执行成功后,再从Primary Shard上将请求同时发送给多个Replica Shard,请求在多个Replica Shard上执行成功并返回给Primary Shard后,写入请求执行成功,返回结果给客户端。 ? 这种模式下,写入操作的延时就等于latency = Latency(Primary Write) + Max(Replicas Write)。只要有副本在,写入延时最小也是两次单Shard的写入时延总和,写入效率会较低,但是这样的好处也很明显,避免写入后,单机或磁盘故障导致数据丢失,在数据重要性和性能方面,一般都是优先选择数据,除非一些允许丢数据的特殊场景。 单独的每一个节点中的操作: ? 在每一个Shard分片中,写入流程分为两部分,先写入Lucene,再写入TransLog。写入请求到达Shard后,先写Lucene文件,创建好索引,此时索引还在内存里面,接着去写TransLog,写完TransLog后,刷新TransLog数据到磁盘上,写磁盘成功后,请求返回给用户。这里有几个关键点:
扩展:增加transLog的原因:当机器宕机或者挂掉,保证内存中的数据不会丢失 ? 原因:采用多个副本后,避免了单机或磁盘故障发生时,对已经持久化后的数据造成损害,但是Elasticsearch里为了减少磁盘IO保证读写性能,一般是每隔一段时间(比如5分钟)才会把Lucene的Segment写入磁盘持久化,对于写入内存,但还未Flush到磁盘的Lucene数据,如果发生机器宕机或者掉电,那么内存中的数据也会丢失,这时候如何保证? (2)ES的读数据的过程? 查询,GET某一条的数据,写入某个document,这个document会自动给你分配一个全局的唯一ID,同时跟住这个ID进行hash路由到对应的primary shard上面去,当然也可以手动的设置ID
(3)ES的搜索数据过程
查询过程大体上分为查询和取回这两个阶段,广播查询请求到所有相关分片,并将它们的响应整合成全局排序后的结果集合,这个结果集合会返回给客户端。
2、分片设计与管理ES 中的文档存储在索引中,索引的最小存储单位是分片,不同的索引存储在不同的分片中。
分片分为主分片和副本分片两种;副本分片是主分片的拷贝,主要用于备份数据。 关于主副分片数的设置:
关于每个节点上的分片数的设置,可参考这里。 (1)主分片的设计如果某个索引只有一个主分片:
如果某个索引有多个主分片:
对于分片的设计建议:
(2)副本分片的设计副本分片是主分片的备份:
3、基本架构:
4、怎样提升检索效率:
5、性能优化:? 关于ES的性能优化,数据拆分,将大量的搜索不到的字段,拆分到别的存储中去,这个类似于MySQL的分库分表的垂直才分。
? 不要在搜索的时候去执行各种复杂的操作,尽量在document模型设计的时候,写入的时候就完成了,另外对于一些复杂的操作,尽量要避免
? 翻页的时候,翻得越深,每个shard返回的数据越多,而且协调节点处理的时间越长,当然是用scroll,scroll会一次性的生成所有数据的一个快照,然后每次翻页都是通过移动游标完成的。 api 只是在一页一页的往后翻 四、竞品对比1、solr简述:
2、Elasticsearch 与 Solr 的比较
五、性能分析1、对已有数据检索:单纯的对已有的数据进行检索时,solr较好 2、当实时建立索引时:solr会产生I/O阻塞,查询效率比较差,ES更具优势 3、大数据的条件下检索:六、应用实践项目:ES-jd(仿京东搜索)地址:? https://github.com/23-19-zheng/projectDataBase/tree/%E9%A1%B9%E7%9B%AE/es-jd 七、部署运维1、安装? 下载安装,开箱即用 方法一: ? 下载地址:https://www.elastic.co/cn/downloads/elasticsearch 方法二:使用命令(mac为例) ? 1、安装: brew install elasticserach ? 2、产看版本(检验安装是否成功) elasticsearch --version 3、启动 ? sh ./bin/elasticsearch 其他命令可在bin目录下面看,见下图 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rjuGaVHo-1628491470012)(/Users/zhengchao/Library/Application Support/typora-user-images/image-20210730155101685.png)] 4、检验启动是否成功 ? 浏览器访问:http://localhost:9200,出现以下的界面表示成功 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xv2jd2oe-1628491470013)(/Users/zhengchao/Library/Application Support/typora-user-images/image-20210730155539086.png)] ? 5、关闭es 方法一:使用插件 elasticsearch——head插件(见扩展) ? 方法二:使用 kill 命令杀死进程
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/18 21:05:26- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |