🍬 博主介绍
👨🎓 博主主页:淼淼_喵的博客_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,这样新旧数据就一定在一个段了
版权归原作者 chad__chang 所有, 如有侵权,请联系我们删除。