ES的删除和更新,旧数据到低是如何处理的?

简介: 根据ES的读写入原理,大家都知道ES写入时每秒从内存缓冲区(memory buffer)生成小的segment,将其递交给系统缓存(OS filesystem cache)中,后台会定期的对这些小的segment 合并成一个大的segment段

目录

删除和更新分析

底层逻辑


image.gif编辑

删除和更新分析

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

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

首先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

image.gif

host: 你的ES主机名ip

index: 你要操作的索引名

解释:

/_forcemerge                              就是强制合并的意思

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

目录
打赏
0
0
0
0
2
分享
相关文章
sqlite3自动插入创建时间和更新时间
在本文中,作者分享了如何使用sqlite3数据库来记录结构化日志,并实现主键ID自增、插入数据时自动填充创建时间(created_at)以及更新数据时更新时间(updated_at)的功能。首先,创建数据库和表`position_info`,然后通过修改表结构使ID字段为自动递增。接着,设置`created_at`和`updated_at`字段默认值为当前时间。最后,创建一个触发器在数据更新时自动更新`updated_at`。完整SQL代码包括表创建和触发器定义。
298 0
|
6月前
|
03 MongoDB文档的各种增加、更新、删除操作总结
文章总结了MongoDB中文档的增删改操作,包括插入文档、更新现有文档以及删除文档的具体方法和示例。
213 0
当update修改数据与原数据相同时会再次执行吗
当update修改数据与原数据相同时会再次执行吗
65 1
MySQL中,当update修改数据与原数据相同时会再次执行吗
MySQL中,当update修改数据与原数据相同时会再次执行吗
61 0
数据的删除与修改
数据的删除与修改
211 0
面试官:MySQL 中 update 更新,数据与原数据相同时会执行吗?大部分人答不上来!
面试官:MySQL 中 update 更新,数据与原数据相同时会执行吗?大部分人答不上来!
242 0