[ElasticSearch从入门到场景实战]-为什么使用ElasticSearch
“人生起起伏伏,有风光无限日,也有落魄失魂时,人在低谷时,唯有“熬过去,才会赢”
前言
ElasticSearch介绍
ElasticSearch是一个基于Lucene库的搜索引擎,它提供了一个分布式多租户能力的全文搜索引擎,同时提供了HTTP Web接口和无模式JSON文档。ElasticSearch是使用JAVA语言开发的,客户端在主流的Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby等其他许多语言中都是可以使用的。
ES 的搜索引擎严重依赖于底层的 Filesystem Cache。如果Filesystem Cache可以分配到更多的内存,让内存足够去存放IDX Segment File 索引数据文件,那么数据基本就都是在内存中存放,所有的搜索都是直接在内存中查询,速度是非常快的。如果Filesystem Cache没有分配到足够的内存,数据不足以全部存放在内存中,剩下的数据就会去硬盘中读取,受限于硬盘的读写速度,那么性能便会大打折扣。
ElasticSearch是一个近实时搜索引擎,为什么说是近实时?首先,我们需要知道一个索引(index),是由多个段(segment)组成的,新增的document会优先写入到indexing buffer区中,然后被重写成一个segment,之后再被写入到Filesystem Cache,数据被写入到Filesystem Cache中后,其实就已经可以被打开了,但实际上,Filesystem Cache中要打开一个新的segment需要一个refresh操作,这个操作在es中默认是1秒钟,这也是我们为什么说es是个近实时搜索引擎的原因。另外,数据写入到了Filesystem Cache中并不是已经结束了,数据还要进行持久化操作,在数据被写入到Filesystem Cache中后,经过一段时间或者外部触发,数据会执行fsync操作,对数据进行full commit写入到硬盘中。
ElasticSearch使用场景
全文检索
类似于Google搜索,百度搜索和维基百科等,对全文关键字进行检索。es中提供了full-text search的查询方式,可以在在全文字段中搜索到最相关的文档。例如博客,就是对全文检索,检索到文章相应的关键字,展现给用户该文章的链接。
用户画像
通过收集用户的行为日志,分析并建立用户模型,保存在es中,并利用es强大的深入搜索和聚合的能力,可以更好的分析和展示用户的行为数据。例如推荐系统,就是利用用户模型的用户数据,对用户数据交叉查询,分析出用户细粒度的喜好。
监控系统
利用es高性能查询的特性,收集系统的监控数据,近实时展现监控数据,同时也方便用户对监控数据进行关键字排查。
日志系统
常用的方案是ELK(elasticsearch+logstash+kibana),利用logstash去收集logback的日志信息,再通过es做存储,最后可以再kibana去利用es api查看和分析日志的相关信息。
ElasticSearch特点
可以搭建大型集群,去处理PB级数据,服务于大型企业,同时也可以单机部署,服务于小型企业
集合了lucene的全文检索的特点,但又具有支持分布式技术,同时具有分析的能力,加上自身提供存储功能,部署简单,达到了真正开箱即用的便捷。
拥有传统数据库的存储能力,又在其基础上增强了查询能力,并提供各种分析,检索的能力,可以处理海量数据,提供了很多数据库所无法提供的功能
总 结