Elasticsearch索引的基本操作(3)-索引的滚动索引

栏目: 后端 · 发布时间: 4年前

内容简介:笔者的工作场景中,每天需要使用Elasticsearch处理数亿的日志记录,这些数据之间不会有直接的关系,只是用于记录以及用作后续的分析处理以及报表输出。如果都将这些数据所有的数据都放到相同的索引中,那随着时间的堆积,这无疑将会是非常庞大的数据,并且随着索引数量的增加,后续数据的插入和查询,都将会变得越来越慢。Elasticsearch中提供了对滚动索引(rollover index)的支持,可以给索引设置一定的条件,并指定一个对外使用的索引别名,当索引达到指定的条件时,就会按照一定的规则建立新的索引,对应

1、说明

笔者的工作场景中,每天需要使用Elasticsearch处理数亿的日志记录,这些数据之间不会有直接的关系,只是用于记录以及用作后续的分析处理以及报表输出。如果都将这些数据所有的数据都放到相同的索引中,那随着时间的堆积,这无疑将会是非常庞大的数据,并且随着索引数量的增加,后续数据的插入和查询,都将会变得越来越慢。

Elasticsearch中提供了对滚动索引(rollover index)的支持,可以给索引设置一定的条件,并指定一个对外使用的索引别名,当索引达到指定的条件时,就会按照一定的规则建立新的索引,对应的别名也会指向新的索引,后续的数据就会写到新建的索引中。由于外部应用使用的是索引的别名,对这种变化也是完全无感知的。

触发滚动索引的参数

参数名

说明

max_age

指定索引存在的最大周期,如1d,7d,1m,1y

max_docs

存放的最的索引文档数,这个不包括副本中的索引文档数

max_size

索引中主分片所占用的空间大小

这几个条件可以同时设置,只要有其中一项条件达到了,就会触发建立新的索引的动作。

通过滚动操作生成的新的索引的名称,可以通过手工指定索引名称的方式,如果源索引的名称符合自动生成新的索引名称的要求,滚动生成的索引则会根据源索引名称,自动生成新的索引名称,以下是滚动索引名称自动生成的两种情况

  • 索引名称以索引名称的前缀、中划线“-”和数字这三部份构成,如logs-1、logs-01、logs-123456、logs-1234567等;中划线“-”后面的数字的长度小于6位,则生成的滚动索引的名称会自动用数字0补齐为6位,如logs-1、logs-01两个生成的下一个滚动索引的名称是logs-000002,因而在设定滚动索引时,要避免这种情况,否则后生成的会报索引已经存在的异常;中划线“-”后面的数字的长度大于等于6位的,则生成滚动索引时,会在该数字的基础之上,往上加1,如logs-123456生成的下个滚动索引是logs-123457,logs-1234567生成的下个滚动索引是logs-1234568。
  • 索引名称中包括日期的算式,由索引名称前缀、中划线“-”、日期算式、中划线“-”和数字这五部份构成,如logs-{now/d}-1,生成的滚动索引会在最后的数字的基础之上加1,数字补齐的规则和上面的用0补齐规则是一样的。

2、不符合自动生成滚动索引的示例

1)创建了一个名为logs_index_cannot_rollover的索引,并为其指定了别名logs_index:

PUT /logs_index_cannot_rollover

{

"aliases": {

"logs_index": {}

}

}

响应:

{

"acknowledged" : true,

"shards_acknowledged" : true,

"index" : "logs_index_cannot_rollover"

}

表示操作成功。

2)往其中写入2条数据:

POST /logs_index/_doc

{ "name":"feng" }

POST /logs_index/_doc

{ "name":"feng1" }

3)给上面的生成的索引指定滚动生成新的索引的条件,这里为了演示上的方便,为其设置条件max_dos为1:

POST /logs_index/_rollover/logs_index_cannot_rollover-1

{

"conditions": {

"max_docs":  1

}

}

由于这里的源索引不符合自动生成新的滚动索引名称的要求,因而这里必须指定目标索引,否则会报错,其中logs_index_cannot_rollover-1为后面用于生成的新的滚动索引的名称。

响应:

{

"acknowledged" : false,

"shards_acknowledged" : false,

"old_index" : "logs_index_cannot_rollover",

"new_index" : "logs_index_cannot_rollover-1",

"rolled_over" : false,

"dry_run" : false,

"conditions" : {

"[max_docs: 1]" : false

}

}

表示滚动请求执行成功了,生成了新的索引logs_index_cannot_rollover,别名logs_index会从自动从原索引logs_index_cannot_rollover上自动删除,然后指向新生成的索引,后续新生成的文档也会自动插入到新的索引中。

3、 符合自动生成滚动索引的示例

3.1 索引名称符合数字格式要求的示例

1)创建索引

PUT /logs_index-001

{

"aliases": {

"logs_index_auto": {}

}

}

  1. 写入两条测试数据,请参考前面的数据写入示例。
  2. 执行滚动索引操作,不指定目标索引名称

POST /logs_index_auto/_rollover

{

"conditions": {

"max_docs":  1

}

}

响应:

{

"acknowledged" : false,

"shards_acknowledged" : false,

"old_index" : "logs_index-001",

"new_index" : "logs_index-000002",

"rolled_over" : false,

"dry_run" : false,

"conditions" : {

"[max_docs: 1]" : false

}

}

该响应中可以看到,生成了新的索引logs_index-000002。

3.2 索引名称符合日期算式格式要求的示例

1)创建索引,此时索引名称中包含了表达式和特殊字符,因而在执行请求前,需要将其进行URL编码操作,如下所示:

#/

PUT /%3clogs_index_date_auto-%7bnow%2fd%7d-001%3e

{

"aliases": {

"logs_index_date_auto": {}

}

}

响应:

{

"acknowledged" : true,

"shards_acknowledged" : true,

"index" : "logs_index_date_auto-2019.05.03-001"

}

提示成功创建了索引,名称为logs_index_date_auto-2019.05.03-001。

2)写入两条测试数据,请参考前面的数据写入示例。

3)执行滚动索引操作,不指定目标索引名称:

POST /logs_index_date_auto/_rollover

{

"conditions": {

"max_docs":  1

}

}

响应:

{

"acknowledged" : true,

"shards_acknowledged" : true,

"old_index" : "logs_index_date_auto-2019.05.03-001",

"new_index" : "logs_index_date_auto-2019.05.03-000002",

"rolled_over" : true,

"dry_run" : false,

"conditions" : {

"[max_docs: 1]" : true

}

}

提示生成了新的索引,名称为logs_index_date_auto-2019.05.03-000002。

滚动索引创建新的索引的过程,与单独创建新的索引的过程是类似的,可以从符合符合的索引模板中自动读取配置、别名、mappings等信息,也单个在执行滚动(_rollover)这一动作时,同时指定新索引的配置、别名、mappings等信息,在些就不举例了。

滚动索引提供了一种新建索引不影响对外使用的方式,但其本身还不够智能,需要配合一些外部的自动化方法才可以做得更好,如定期执行滚动操作等,而不是由Elasticsearch本身去判断。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Pragmatic Programmer

The Pragmatic Programmer

Andrew Hunt、David Thomas / Addison-Wesley Professional / 1999-10-30 / USD 49.99

本书直击编程陈地,穿过了软件开发中日益增长的规范和技术藩篱,对核心过程进行了审视――即根据需求,创建用户乐于接受的、可工作和易维护的代码。本书包含的内容从个人责任到职业发展,直至保持代码灵活和易于改编重用的架构技术。从本书中将学到防止软件变质、消除复制知识的陷阱、编写灵活、动态和易适应的代码、避免出现相同的设计、用契约、断言和异常对代码进行防护等内容。一起来看看 《The Pragmatic Programmer》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试