🍬 博主介绍 

👨‍🎓 博主主页:淼淼_喵的博客_CSDN博客-Zookeeper,Hadoop,kafka领域博主

✨主攻领域:【大数据开发】【数据仓库】 【ETL】 【数据分析】【面试分析】

🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋

🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝欢迎评论

🙏作者水平有限,欢迎各位大佬指点,相互习进步!
 

目录

🍬 博主介绍 

删除和更新分析

底层逻辑


删除和更新分析

当我们执行删除操作和更新操作时,实际上是在索引中的文档上‘’标记‘’了删除,我们索性称之为旧文档吧。当我们操作的是更新的动作时,我们的文档实际上是重新插入的,我们称之为新文档

到这里是否你有一个疑问,那么旧文档是逻辑上的删除喽,那物理上的删除我们怎么做呢?

首先ES后台有自己的清除旧文档的时机, 我们从ES的官方描述可以看出

deleting a document doesn’t immediately remove the document from disk; it just marks it as deleted. Elasticsearch will clean up deleted documents in the background as you continue to index more data.

译文:

删除文档不会立即从磁盘中删除文档;它只是将其标记为已删除。Elasticsearch将在您继续索引更多数据时,在后台清理已删除的文档。

很清晰,当做删除文档时ES后台会帮我们在继续索引更多数据时,清理这些“标记”已删除的文档,拿更新文档也是一样的道理呗。

底层逻辑

根据ES的读写入原理,大家都知道ES写入时每秒从内存缓冲区(memory buffer)生成小的segment,将其递交给系统缓存(OS filesystem cache)中,后台会定期的对这些小的segment 合并成一个大的segment段,这个时候就是物理删除的文档的时候,为什么说索引更多数据时,我的理解是索引其他数据时,系统是按页读的,会把逻辑删除的旧数据和更新的新数据,这个时候再系统缓存区就会有交集,正好遇到了段合并,这个时候就会把文档逻辑删除。

当然ES也会存在读不到这个文档,也就是新旧数据不在一个segment中的情况,这种情况我们可以用手动的进行操作

curl -X PUT http://host:9200/index/_forcemerge?max_number_segments=1

host: 你的ES主机名ip

index: 你要操作的索引名

解释:

/_forcemerge                              就是强制合并的意思

max_number_segments=1        就是将最大的段的个数设置为1,这样新旧数据就一定在一个段了

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐