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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 1、题记想到删除,基础认知是delete,细分为删除文档(document)和删除索引;要删除历史数据,基础认知是:删除了给定条件的数据,用delete_by_query。实际操作发现:- 删除文档后,磁盘空间并没有立即减少,反而增加了?- 除了定时任务+delete_by_query,有没有更好的方式呢?

2、常见的删除操作

2.1 删除单个文档

DELETE /twitter/_doc/1

1

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

POST twitter/_delete_by_query

{

 "query": {

   "match": {

     "message": "some message"

   }

 }

}

1

2

3

4

5

6

7

8

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


POST twitter/_doc/_delete_by_query?conflicts=proceed

{

 "query": {

   "match_all": {}

 }

}

1

2

3

4

5

6

2.3 删除单个索引

DELETE /twitter

1

2.4 删除所有索引

DELETE /_all

1

或者


DELETE /*

1

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


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

}

1

2

3

4

5

6

7

8

9

10

11

12

13

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.


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

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


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


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


POST /_forcemerge

1

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"

1

2

3

4

5

6

7

8

9

10

11

12

13

merge脚本如下:


#!/bin/sh

curl -XPOST 'http://192.168.1.101:9200/_forcemerge?

only_expunge_deletes=true&max_num_segments=1'

1

2

3

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_FILE


 Curator for Elasticsearch indices.


 See http://elastic.co/guide/en/elasticsearch/client/curator/current


Options:

 --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.

1

2

3

4

5

6

7

8

9

10

11

12

核心:

- 配置文件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 可以很方便的管理索引的保存期限。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
30天前
|
关系型数据库 MySQL
elasticsearch对比mysql以及使用工具同步mysql数据全量增量
elasticsearch对比mysql以及使用工具同步mysql数据全量增量
21 0
|
1月前
|
消息中间件 存储 关系型数据库
【微服务】mysql + elasticsearch数据双写设计与实现
【微服务】mysql + elasticsearch数据双写设计与实现
68 2
|
1月前
|
监控 安全 Linux
【Elasticsearch专栏 14】深入探索:Elasticsearch使用Logstash的日期过滤器删除旧数据
使用Logstash的日期过滤器可以有效删除Elasticsearch中的旧数据,释放存储空间并提高集群性能。通过配置Logstash,可以指定索引模式、筛选时间戳早于特定阈值的文档,并在输出阶段删除这些旧数据。执行配置时,需确保Logstash与Elasticsearch连接正常,并监控日志以确保操作安全。定期执行此操作可确保旧数据不会过多积累。总之,Logstash的日期过滤器提供了一种简单而高效的方法,帮助管理和优化Elasticsearch中的数据。
|
1月前
|
存储 搜索推荐 Java
|
3月前
|
存储 缓存 数据库
PB数据毫秒级搜索之Elasticsearch(二)基础了解
PB数据毫秒级搜索之Elasticsearch(二)基础了解
91 0
|
6月前
|
存储 自然语言处理 Java
【elasticsearch】记录ES查询数据结果为空的问题(单个字搜索可以,词语搜索为空)
【elasticsearch】记录ES查询数据结果为空的问题(单个字搜索可以,词语搜索为空)
299 0
|
7月前
|
数据库 索引
elasticsearch中join类型数据如何进行父子文档查询?
elasticsearch中join类型数据如何进行父子文档查询?
|
1月前
|
监控 Java 测试技术
【Elasticsearch专栏 13】深入探索:Elasticsearch使用Curator工具删除Elasticsearch中的历史数据
使用Curator工具可以有效管理Elasticsearch中的旧数据,通过编写YAML配置文件定义删除操作。配置中指定了基于索引名称前缀和年龄的过滤器,确保仅删除符合条件的旧索引。执行删除操作时,Curator会应用过滤器识别目标索引,并向Elasticsearch发送删除请求。通过设置选项,如忽略空列表和超时时间,可以确保操作的灵活性和稳定性。使用Curator不仅释放了存储空间,还提高了查询性能,是维护Elasticsearch健康的重要工具
|
1月前
|
JSON 监控 数据管理
【Elasticsearch专栏 12】深入探索:Elasticsearch使用索引生命周期管理(ILM)自动化删除旧数据
Elasticsearch的ILM功能允许用户定义策略,自动管理索引从创建到删除的生命周期。用户可以设置策略,根据索引年龄或大小自动删除旧数据,节省存储空间。通过应用ILM策略于索引模板,新索引将遵循预定义的生命周期。用户还可以监控ILM状态,确保策略按预期执行。使用ILM,用户可以高效地管理数据,确保旧数据及时删除,同时保持数据完整性和安全性。
|
2月前
|
存储 缓存 自然语言处理
【Elasticsearch专栏 05】深入探索:Elasticsearch在处理非结构化数据时,倒排索引有何优势
在处理非结构化数据时,倒排索引的优势在于其高效的查询性能,能够迅速匹配文本中的关键词,实现全文搜索。此外,倒排索引支持复杂的查询操作,可扩展性强,且通过压缩技术优化存储空间。这些特点使倒排索引成为处理非结构化数据的理想选择。

热门文章

最新文章