前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >探究 | Elasticsearch如何物理删除给定期限的历史数据?

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

作者头像
铭毅天下
发布2018-07-26 15:14:09
4.5K1
发布2018-07-26 15:14:09
举报
文章被收录于专栏:铭毅天下铭毅天下

01 题记

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

  • 删除文档后,磁盘空间并没有立即减少,反而增加了?
  • 除了定时任务+delete_by_query,有没有更好的方式呢?

02 常见的删除操作

2.1 删除单个文档

代码语言:javascript
复制
1DELETE /twitter/_doc/1

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

代码语言:javascript
复制
1POST twitter/_delete_by_query
2{
3  "query": { 
4    "match": {
5      "message": "some message"
6    }
7  }
8}

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

代码语言:javascript
复制
1POST twitter/_doc/_delete_by_query?conflicts=proceed
2{
3  "query": {
4    "match_all": {}
5  }
6}

2.3 删除单个索引

代码语言:javascript
复制
1DELETE /twitter

2.4 删除所有索引

代码语言:javascript
复制
1DELETE /_all

或者

代码语言:javascript
复制
1DELETE /*

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

03 删除文档后台做了什么?

执行删除后的返回结果:

代码语言:javascript
复制
1{
 2  "_index": "test_index",
 3  "_type": "test_type",
 4  "_id": "22",
 5  "_version": 2,
 6  "result": "deleted",
 7  "_shards": {
 8    "total": 2,
 9    "successful": 1,
10    "failed": 0
11  },
12  "_seq_no": 2,
13  "_primary_term": 17
14}

解读:

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

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

真正的删除时机:

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.

04 删除索引和删除文档的区别?

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

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

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

代码语言:javascript
复制
1POST /_forcemerge

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

有了上面的认知,仅保存近100天的数据任务分解为:

  • 1)delete_by_query设置检索近100天数据;
  • 2)执行forcemerge操作,手动释放磁盘空间。

删除脚本如下:

代码语言:javascript
复制
1#!/bin/sh
 2curl -H'Content-Type:application/json' -d'{
 3    "query": {
 4        "range": {
 5            "pt": {
 6                "lt": "now-100d",
 7                "format": "epoch_millis"
 8            }
 9        }
10    }
11}
12' -XPOST "http://192.168.1.101:9200/logstash_*/
13_delete_by_query?conflicts=proceed"

merge脚本如下:

代码语言:javascript
复制
1#!/bin/sh
2curl -XPOST 'http://192.168.1.101:9200/_forcemerge?
3only_expunge_deletes=true&max_num_segments=1'

06 有没有更通用的方法?

有,使用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命令行操作

代码语言:javascript
复制
1$ curator --help
2Usage: curator [OPTIONS] ACTION_FILE
3  Curator for Elasticsearch indices.
4  See http://elastic.co/guide/en/elasticsearch/client/curator/current
5Options:
6  --config PATH  Path to configuration file. Default: ~/.curator/curator.yml
7  --dry-run      Do not perform any changes.
8  --version      Show the version and exit.
9  --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对应。

07 小结

  • 多参考官网最新的文档,历史版本的历史文档很容易误导人;
  • 多真正去实践,而不是仅限于知道;
  • 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,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 铭毅天下Elasticsearch 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01 题记
  • 02 常见的删除操作
    • 2.1 删除单个文档
      • 2.2 删除满足给定条件的文档
        • 2.3 删除单个索引
          • 2.4 删除所有索引
          • 03 删除文档后台做了什么?
          • 04 删除索引和删除文档的区别?
          • 05 如何仅保存最近100天的数据?
          • 06 有没有更通用的方法?
          • 6.1 curator简介
            • 6.2 curator官网地址
              • 6.3 curator安装向导
                • 6.4 curator命令行操作
                  • 6.5 curator适用场景
                  • 07 小结
                  相关产品与服务
                  Elasticsearch Service
                  腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档