ES的近实时性是什么意思?原理是什么?

ES 的"近实时"(near real-time)是指当你往 ES 索引(Index)中插入、更新或删除文档时,这些变更几乎立刻就对用户可见和可查询。然而,它并不是真正的实时,因为 ES 采用了一些优化和缓冲机制,以提高性能和吞吐量。

🟥 具体来说,ES的近实时性质包括以下几个方面:

  1. 索引操作的延迟: 当我们执行索引操作(插入、更新、删除文档)时,ES会将这些操作存储在一个缓冲区(buffer)中。这意味着虽然变更几乎立刻对用户可见,但实际上它们可能并没有立刻写入硬盘。ES会定期将缓冲区中的操作批量写入磁盘,这个操作可能会有少量延迟。

  2. 刷新机制: ES会定期执行一个操作叫做"刷新"。这个操作会确保在硬盘上的所有操作都被提交(committed),并且使这些变更对搜索可见。默认情况下,ES每秒执行一次刷新操作。这意味着,在某些情况下,你可能需要等待一秒钟才能搜索到最新的变更。

  3. 搜索的近实时性: ES的搜索操作通常是近实时的,因为它们可以立即反映已经被索引的文档。在上述刷新操作执行前,搜索仍然可以进行,但不能保证最新的变更已经被搜索到。

不过,我们也可以配置ES的近实时性,包括刷新频率等,以满足你的具体需求。近实时性是ES在维护高性能和数据一致性之间的一种权衡,允许我们根据应用的要求进行调整。在许多情况下,ES的近实时性对于大多数应用已经足够,但在某些特定应用中,可能需要更高的实时性。

🟥 以下是一些影响ES近实时性的主要配置项:

  1. 刷新间隔(Refresh Interval): 刷新是将在内存中的索引数据写入磁盘,从而使变更对搜索可见的过程。我们可以配置刷新的间隔时间,通常以毫秒为单位。默认情况下,ES每秒执行一次刷新,其含义就是一秒内的变更最多需要等待一秒才能被搜索到。我们可以通过修改index.refresh_interval 来调整刷新的频率。[官方文档地址]

  2. 索引的刷新策略: ES支持不同的索引刷新策略,包括手动刷新、自动刷新和index.refresh_interval。手动刷新需要显式地调用_refresh API [官方文档地址]。自动刷新是在上述配置的刷新间隔内自动执行。我们可以根据应用的需求选择合适的刷新策略。

  3. 索引排序: 当你索引文档时,ES会自动对文档进行排序以提高搜索性能。这种排序也会影响近实时性,因为排序后的文档更容易被检索。你可以使用sort属性来配置索引排序的字段。[官方文档地址]

📢 注意:更频繁的刷新会增加磁盘和CPU的负担,而较长的刷新间隔可能导致搜索的实时性下降。在性能和实时性之间需要找到平衡点,以满足你的应用需求。


让我们每天进步一点点,感谢您的阅读。别忘了点赞、收藏和关注~

相关推荐
zjy277774 分钟前
Layui tab选项卡如何动态根据ID值进行程序化切换
jvm·数据库·python
m0_602857767 分钟前
Redis如何修复槽位分配重叠的脏状态_使用redis-cli --cluster fix工具扫描并修复不一致的Slot
jvm·数据库·python
hljqfl8 分钟前
Oracle存储结构
数据库·oracle
2301_7662834421 分钟前
怎样开启phpMyAdmin的操作审计日志_记录每条执行的SQL
jvm·数据库·python
y = xⁿ27 分钟前
Redis八股学习日记:布隆过滤器
数据库·redis·学习
郝亚军30 分钟前
ubuntu 22.04如何安装libmodbus
运维·服务器·ubuntu
李日灐35 分钟前
< 6 > Linux 自动化构建工具:makefile 详解 + 进度条实战小项目
linux·运维·服务器·后端·自动化·进度条·makefile
悟纤36 分钟前
Seedance 2.0 API 文生视频 |支持100并发 | [灵龙AI API]
数据库·文生视频·seedance 2.0
czlczl200209251 小时前
MySQL 性能优化:前缀索引(Prefix Index)深度解析
数据库·mysql·性能优化
逍遥德1 小时前
SpringBoot数据库连接池HikariCP,Druid,Tomcat JDBC,DBCP2,c3p0配置使用
数据库·spring boot·tomcat