通过前面两篇文章的介绍,我们大概已经知道了
Elasticsearch处理数据的流程,其中在Elasticsearch和磁盘之间还有一层称为FileSystem Cache的系统缓存,正是由于这层cache的存在才使得es能够拥有更快搜索响应能力。
我们都知道一个index是由若干个segment组成,随着每个segment的不断增长,我们索引一条数据后可能要经过分钟级别的延迟才能被搜索,为什么有种这么大的延迟,这里面的瓶颈点主要在磁盘。
持久化一个segment需要fsync操作用来确保segment能够物理的被写入磁盘以真正的避免数据丢失,但是fsync操作比较耗时,所以它不能在每索引一条数据后就执行一次,如果那样索引和搜索的延迟都会非常之大。
所以这里需要一个更轻量级的处理方式,从而保证搜索的延迟更小。这就需要用到上面提到的FileSystem Cache,所以在es中新增的document会被收集到indexing buffer区后被重写成一个segment然后直接写入filesystem cache中,这个操作是非常轻量级的,相对耗时较少,之后经过一定的间隔或外部触发后才会被flush到磁盘上,这个操作非常耗时。但只要sengment文件被写入cache后,这个sengment就可以打开和查询,从而确保在短时间内就可以搜到,而不用执行一个full commit也就是fsync操作,这是一个非常轻量级的处理方式而且是可以高频次的被执行,而不会破坏es的性能。
如下图:
在elasticsearch里面,这个轻量级的写入和打开一个cache中的segment的操作叫做refresh,默认情况下,es集群中的每个shard会每隔1秒自动refresh一次,这就是我们为什么说es是近实时的搜索引擎而不是实时的,也就是说给索引插入一条数据后,我们需要等待1秒才能被搜到这条数据,这是es对写入和查询一个平衡的设置方式,这样设置既提升了es的索引写入效率同时也使得es能够近实时检索数据。
refresh的用法如下:
````
POST /_refresh //刷新所有的索引
POST /blogs/_refresh //刷新指定的索引
````
refresh操作相比commit操作是非常轻量级的但是它仍然会耗费一定的性能,所以不建议在每插入一条数据后就执行一次refresh命令,es默认的1秒的延迟对于大多数场景基本都可以接受。
当然并不是所有的业务场景都需要每秒都refresh一次,如果你短时间内要索引大量的数据,为了优化索引的写入速度,我们可以设置更大的refresh间隔,从而提升写入性能,命令如下:
````
PUT /my_logs
{
"settings": {
"refresh_interval": "30s"
}
}
````
上面的参数是可以随时动态的设置到一个存在的索引里面,如果我们正在插入超大索引时,我们完全可以先关闭掉这个refresh机制,等写入完毕之后再重新打开,这样以来就能大大提升写入速度。
命令如下:
````
PUT /my_logs/_settings
{ "refresh_interval": -1 } //禁用刷新机制
PUT /my_logs/_settings
{ "refresh_interval": "1s" } //设置每秒刷新一次
````
注意refresh_interval的参数是可以带时间周期的,如果你只写了个1,那就代表每隔1毫秒刷新一次索引,所以设置这个参数时务必要谨慎。
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
- 大小: 32.9 KB
- 大小: 31.5 KB
分享到:
相关推荐
Elasticsearch 是一个开源的高度可扩展的全文搜索和分析引擎,拥有查询近实时的超强性能。 大名鼎鼎的Lucene 搜索引擎被广泛用于搜索领域,但是操作复杂繁琐,总是让开发者敬而远之。而 Elasticsearch将 Lucene 作为...
总的来说,"基于.netcore搜索封装ElasticSearch.zip"提供的库将帮助.NET Core开发者更好地利用Elasticsearch的强大搜索和分析能力,提高应用程序的检索效率和数据处理能力。通过深入理解和熟练使用这个库,开发者...
Elasticsearch是一款强大的开源搜索引擎,广泛应用于大数据分析和实时搜索领域。它基于Lucene库,提供了分布式、全文检索、近实时处理以及丰富的数据分析能力。在本文中,我们将深入探讨Elasticsearch的不同版本及其...
Elasticsearch是近实时的搜索引擎,简单说插入一条新数据后并不能保证立刻搜索到,但保证在1s内一定可以搜索到。 3. Elasticsearch的安装 Elasticsearch的安装需要具备以下环境准备:CentOS7+Elasticsearch7.10...
Elasticsearch 7.17.10 是一个强大的开源搜索引擎和分析引擎,主要用于全文搜索、结构化搜索、近实时分析以及大数据处理。这个版本特别强调对Java 1.8(即Java 8)的支持,这意味着它可以在运行Java 8的环境中稳定...
24. **Elasticsearch的近实时(NRT)搜索是如何实现的?** 写入的数据首先进入内存缓冲区,达到一定阈值或设定时间后刷新至磁盘,然后进行索引构建,这段时间被称为刷新间隔。 25. **Elasticsearch的节点角色有哪些...
Elasticsearch 是一个开源的全文搜索引擎,基于 Lucene 库构建,具有分布式、实时、可扩展性好、近实时处理能力强等特点。它广泛应用于日志分析、监控、搜索、大数据分析等场景。在版本 7.7 中,Elasticsearch 提供...
Elasticsearch 是一个高度可扩展的开源全文搜索引擎,设计用于处理大量数据并提供实时分析。它基于 Lucene 库,但提供了更高级别的分布式、容错和索引管理功能。在1.5.2版本中,Elasticsearch 已经证明了其稳定性和...
ElasticSearch是一款分布式、RESTful 风格的搜索和数据分析引擎,能够达到近实时搜索,稳定,可靠,快速,安装使用方便。客户端支持Java、.NET(C#)、PHP、Python、Ruby等多种语言。 ElasticSearch的起源是Lucene...
Elasticsearch 的核心特性包括全文搜索引擎、近实时处理、分布式、RESTful 风格的接口以及易于管理。6.8.5 版本是该软件的一个稳定版本,提供了多项改进和修复,确保了系统的稳定性和性能。 首先,Elasticsearch 的...
* 近实时(NRT):Elasticsearch 是近实时搜索平台。这意味着从索引文档到可搜索到这段时间之间会有轻微的延迟(通常是一秒钟)。 * Indices:索引,相当于数据库的库,索引是具有相似特征的文档的集合。 * Types:...
7. **近实时处理(NRT)**:Elasticsearch具有近实时(Near Real Time)处理能力,文档被索引后,稍有延迟即可进行搜索。5.6版本优化了这一过程,延迟更小。 8. **集群管理**:Elasticsearch集群由多个节点组成,每...
Elasticsearch是一款强大的开源搜索引擎,基于Lucene库构建,广泛应用于大数据分析、日志收集、实时搜索等领域。本文将深入解析Elasticsearch的核心概念、架构原理,并结合实战案例,帮助你全面掌握这一技术。 首先...
Elasticsearch的核心特性包括横向扩展性、自动分词、近实时搜索、多租户支持和丰富的API。 Elasticsearch-Head是一个用于Elasticsearch的Web前端,通过它可以查看索引、节点、集群的状态,执行搜索、查看文档等操作...
2. 实时搜索:Elasticsearch 提供了实时的搜索功能,支持近实时的搜索和索引。 3. 可扩展的搜索:Elasticsearch 支持多种搜索方式,包括全文搜索、结构化搜索和分析。 4. 面向文档的数据库:Elasticsearch 是面向...
Elasticsearch 7.8.0 是一个高度可扩展的开源全文搜索引擎,它设计用于处理大量数据并提供快速、近实时的搜索与分析能力。在Windows环境下安装ELK(Elasticsearch, Logstash, Kibana)堆栈,Elasticsearch 7.8.0是...
Elasticsearch 6.2.4 是一个高度可扩展、高性能的开源全文搜索引擎,它基于 Lucene 库构建,但提供了更高级别的分布式、实时、近实时搜索和分析功能。这个压缩包“elasticsearch-6.2.4.tar.gz.zip”包含了这个版本的...
4.国外:Wikipedia(维基百科)使用 ES 提供全文搜索并高亮关键字、StackOverflow(IT 问答网站)结合全文搜索与地理位置查询、Github 使用 Elasticsearch 检索 1300 亿行的代码 5.国内:百度(在云分析、网盟、预测...