内容简介:笔者的工作场景中,每天需要使用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": {}
}
}
- 写入两条测试数据,请参考前面的数据写入示例。
- 执行滚动索引操作,不指定目标索引名称
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本身去判断。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Elasticsearch索引的基本操作(6)-索引设置
- Elasticsearch索引的基本操作(7)-索引模板
- Elasticsearch索引的基本操作(8)-索引缓存、refresh、flush等操作
- Elasticsearch 入门到高手的成长阶梯-索引的基本操作(2)-索引的收缩和拆分
- Elasticsearch索引的基本操作(5)-别名设置
- Elasticsearch索引的基本操作(4)-Mapping设置
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning ASP.NET 4 in C# and Vb
Imar Spaanjaars / Wrox / 2010-3-19 / GBP 29.99
This book is for anyone who wants to learn how to build rich and interactive web sites that run on the Microsoft platform. With the knowledge you gain from this book, you create a great foundation to ......一起来看看 《Beginning ASP.NET 4 in C# and Vb》 这本书的介绍吧!