1、题记

想到删除,基础认知是delete,细分为删除文档(document)和删除索引;要删除历史数据,基础认知是:删除了给定条件的数据,用delete_by_query。
实际操作发现:
- 删除文档后,磁盘空间并没有立即减少,反而增加了?
- 除了定时任务+delete_by_query,有没有更好的方式呢?

2、常见的删除操作

2.1 删除单个文档

DELETE /twitter/_doc/1

2.2 删除满足给定条件的文档

POST twitter/_delete_by_query
{"query": { "match": {"message": "some message"}}
}

注意:执行批量删除的时候,可能会发生版本冲突。强制执行删除的方式如下:

POST twitter/_doc/_delete_by_query?conflicts=proceed
{"query": {"match_all": {}}
}

2.3 删除单个索引

DELETE /twitter

2.4 删除所有索引

DELETE /_all

或者

DELETE /*

删除所有索引是非常危险的操作,要注意谨慎操作。

3、删除文档后台做了什么?

执行删除后的返回结果:

{"_index": "test_index","_type": "test_type","_id": "22","_version": 2,"result": "deleted","_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 2,"_primary_term": 17
}

解读:

索引的每个文档都是版本化的。
删除文档时,可以指定版本以确保我们试图删除的相关文档实际上被删除,并且在此期间没有更改。

每个在文档上执行的写操作,包括删除,都会使其版本增加

真正的删除时机:

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.

4、删除索引和删除文档的区别?

1)删除索引是会立即释放空间的,不存在所谓的“标记”逻辑。

2)删除文档的时候,是将新文档写入,同时将旧文档标记为已删除。 磁盘空间是否释放取决于新旧文档是否在同一个segment file里面,因此ES后台的segment merge在合并segment file的过程中有可能触发旧文档的物理删除

但因为一个shard可能会有上百个segment file,还是有很大几率新旧文档存在于不同的segment里而无法物理删除。想要手动释放空间,只能是定期做一下force merge,并且将max_num_segments设置为1。

POST /_forcemerge

5、如何仅保存最近100天的数据?

有了上面的认知,仅保存近100天的数据任务分解为:
- 1)delete_by_query设置检索近100天数据;
- 2)执行forcemerge操作,手动释放磁盘空间。

删除脚本如下:

#!/bin/sh
curl -H'Content-Type:application/json' -d'{"query": {"range": {"pt": {"lt": "now-100d","format": "epoch_millis"}}}
}
' -XPOST "http://192.168.1.101:9200/logstash_*/
_delete_by_query?conflicts=proceed"

merge脚本如下:

#!/bin/sh
curl -XPOST 'http://192.168.1.101:9200/_forcemerge?
only_expunge_deletes=true&max_num_segments=1'

6、有没有更通用的方法?

有,使用ES官网工具——curator工具。

6.1 curator简介

主要目的:规划和管理ES的索引。支持常见操作:创建、删除、合并、reindex、快照等操作。

6.2 curator官网地址

http://t.cn/RuwN0oM

Git地址:https://github.com/elastic/curator

6.3 curator安装向导

地址:http://t.cn/RuwCkBD

注意:
curator各种博客教程层出不穷,但curator旧版本和新版本有较大差异,建议参考官网最新手册部署。
旧版本命令行方式新版本已不支持。

6.4 curator命令行操作

$ curator --help
Usage: curator [OPTIONS] ACTION_FILECurator for Elasticsearch indices.See http://elastic.co/guide/en/elasticsearch/client/curator/currentOptions:--config PATH  Path to configuration file. Default: ~/.curator/curator.yml--dry-run      Do not perform any changes.--version      Show the version and exit.--help         Show this message and exit.

核心:
- 配置文件config.yml:配置要连接的ES地址、日志配置、日志级别等;

  • 执行文件action.yml: 配置要执行的操作(可批量)、配置索引的格式(前缀匹配、正则匹配方式等)

6.5 curator适用场景

最重要的是:

  • 仅以删除操作为例:curator可以非常简单地删除x天后的索引的前提是:索引命名要遵循特定的命名模式——如:以天为命名的索引:logstash_2018.04.05。

  • 命名模式需要和action.yml中的delete_indices下的timestring对应。

7、小结

  • 多参考官网最新的文档,历史版本的历史文档很容易误导人;
  • 多真正去实践,而不是仅限于知道;
  • medcl:ES新版本6.3 有一个 Index LifeCycle Management 可以很方便的管理索引的保存期限。

参考:

[1]http://t.cn/RuwOTv
[2]http://t.cn/RuwXHBr
[3]http://t.cn/RuwOofC

2018-04-22 14:51 思于家中床前

作者:铭毅天下
转载请标明出处,原文地址:
https://blog.csdn.net/laoyang360/article/details/80038930
如果感觉本文对您有帮助,请点击‘点赞’支持一下,您的支持是我坚持写作最大的动力,谢谢!

探究 | Elasticsearch如何物理删除给定期限的历史数据?相关推荐

  1. Elasticsearch如何物理删除给定期限的历史数据?

    1.题记 想到删除,基础认知是delete,细分为删除文档(document)和删除索引:要删除历史数据,基础认知是:删除了给定条件的数据,用delete_by_query.  实际操作发现:  - ...

  2. 【Elasticsearch】Elasticsearch如何物理删除给定期限的历史数据?

    文章目录 1.概述 1.题记 2.常见的删除操作 2.1 删除单个文档 2.2 删除满足给定条件的文档 2.3 删除单个索引 2.4 删除所有索引 3.删除文档后台做了什么? 4.删除索引和删除文档的 ...

  3. Elasticsearch系列「二」如何物理删除给定期限的历史数据?

    1.题记 想到删除,基础认知是delete,细分为删除文档(document)和删除索引:要删除历史数据,基础认知是:删除了给定条件的数据,用delete_by_query.  实际操作发现:  - ...

  4. 【Elasticsearch】es 定期删除 已经删除的数据 物理删除 不是等待段合并

    文章目录 1.概述 1.概述 由于在Lucene中段具有不变性,所以删除一个文档后不会立即从硬盘中删除该文档,而是产生一个.del文件专门记录被删除的文档.而在检索的过程中,被删除的文件还会参与检索, ...

  5. 数据库防火墙onefirewall,如何防范黑客物理删除?避免携程事件再次上演

    数据库防火墙onefirewall,如何防范黑客物理删除?避免携程事件再次上演 首先解释一下数据库防火墙原理(白名单机制):就类似360手机卫士,事先定义通讯录,别人给你打电话时,只有在通讯录的电话可 ...

  6. ElasticSearch修改和删除文档

    ElasticSearch修改和删除文档 修改文档方式一:使用prepareUpdate,prepareIndex两者选其一皆可 client.prepareUpdate("blog2&qu ...

  7. mongodb 物理删除数据

    刚开始用mongodb的时候,感觉很好用,速度很快,不过后面就遇到一个问题,数据物理内存一直增加,删除表也不管用. 然后网上找了各种办法,最后发现一个办法管用,就是物理删除存储数据. 操作如下: 1. ...

  8. Delphi下物理删除dBase数据库的*.dbf文件

    { ************************************************************ } {                                   ...

  9. Spring Cloud微服务之业务物理删除(十)

    物理删除 1.创建crm_file文件信息表 2. 在service_user模块下面修改我们的代码生成器,部分代码. 3.实现文件删除功能(物理删除,真正的摧毁掉数据) 4.CrmFileContr ...

最新文章

  1. 新公司研发能力低下,何去何从?
  2. python爬虫实例-python3.7简单的爬虫实例详解
  3. Part1_1 pycharm的一些基础设置
  4. linux相对路径列出目录文件,linux – UNIX:列出目录中具有相对路径的文件
  5. php数据库数组去重复数据库,PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)...
  6. Spring系列(三):@ComponentScan注解用法介绍
  7. 在计算机应用中mis,在计算机的应用中,“MIS”表示
  8. andriod之配置文件保存与读取
  9. 关于zend framework控制器中action命名的问题
  10. 蘑菇街移动端混合开发体系的研发与实践
  11. 去掉txt文本某些字符
  12. 电脑开机进入setup的四种界面介绍
  13. 移动安全:Smali语法学习示例与实践
  14. Allegro 使用一些总结
  15. MATLAB设置起始文件夹
  16. RTEMS 移植到 sbc2440 的笔记
  17. 【单片机毕业设计】【mcuclub-cl-015】基于单片机的地铁到站检测的设计
  18. Python入门认知学习程序
  19. 虚云禅师经典佛教语录大全摘抄
  20. SEO网站诊断所要考虑的方面大全

热门文章

  1. 中国工商银行网上银行B2C在线支付接口说明
  2. 写出语句的四元式序列
  3. c语言判断字符是否为某字母,判断字符是否为字母
  4. 1. 语音类实现 (实现读取wav/pcm,STFT)
  5. 国学经典大全android,国学经典大全
  6. rocketmq-常见问题总结(基本概念、高可用、中间件选型)
  7. 汽车vin码识别简述
  8. 【同一电脑原win用户信息迁移到新Win用户下python interpreter显示 no interpreter问题】
  9. ISO26262解析(四)——FMEDA
  10. Linux学习(1)-常用快捷键、文件管理和查询 阅读目录