0
点赞
收藏
分享

微信扫一扫

elasticsearch 删除的时候需要避免的坑


在文章中会把elasticsearch 写作es

elasticsearch 和传统上的数据库还是有很大差别的,从操作的角度和逻辑角度上来看,似乎是相同的,都是增删改查。

  # # elasticsearch 删除和关系型数据库不同的地方 

  但是这些真的不是一回事,比方说在mysql 中的删除,就是从磁盘上删除,而elasticsearch中的删除,并不会马上删除而只是标记删除。而删除的时间点是进行段合并的时候。可以顺着谈一下段合并,es是一个近实时的,因为在默认情况下,es 每秒进行一次刷新,刷新会产生一个段,而一次搜索是正是遍历所有的段,所以随着时间的推移,段的个数会越来越多。比方说,你原本由一个篮子,里边装了某些东西,比方是蛋。慢慢的你的篮子多了,突然问你,你的篮子里边有没有鸭蛋。当你有一个篮子的时候,你只需要看一个篮子就可以回答有还是没有了。但是如果你有十个篮子,甚至更多,那你就要挨个看看才能回答。所以花费的时间自然就长了。而过一段时间,你把十个篮子里边的但都合并到同一个篮子里边,别人再问你有篮子里边有没有鸭蛋的时候,你仍然只需要看一个篮子就可以回答了。段合并就是这个道理。段合并不会把删除的数据写入新段,段合并之后,之前删除的数据才会真正的删除从磁盘上。

  段合并这一块有一个问题,那就是需要段合并的时候,需要额外磁盘空间。当段足够大的以后,剩余的空间不够进行段合并,那么就不进行段合并了,所以删除的哪些数据,也就永远占用磁盘了。

  还有一个可以马上从磁盘删除的方式是,直接删除索引。

举报

相关推荐

0 条评论