利用滚动索引来管理海量Elasticsearch数据

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 利用滚动索引来管理海量Elasticsearch数据

当面对大规模数据集时,单个Elasticsearch索引的数据量若持续增长,可能导致分片容量过大,进而引发查询时内存不足、甚至整个集群崩溃的问题。为避免这种情况,我们可以采用滚动索引(Rollover Index)这一策略,结合索引别名(Index Aliases)的使用,将原本写入单一索引的数据自动分散到多个索引中,实现数据的有效管理和查询优化。下面通过示例详细阐述滚动索引的创建、使用及其工作原理。

创建初始索引与索引别名

首先,我们创建一个名为log1的索引,并为其分配一个索引别名logs-all,以便后续通过别名进行数据写入和查询。

PUT /log1
{
  "aliases": {
    "logs-all": {}
  }
}

接下来,我们向别名logs-all中写入两条示例数据,并确保数据即时可见(通过refresh=true参数)。

PUT logs-all/_doc/1?refresh
{
  "visittime": "10:00:00",
  "keywords": "[世界杯]",
  "rank": 18,
  "clicknum": 13,
  "id": 10001,
  "userid": "2982199073774412",
  "key": "10001"
}

PUT logs-all/_doc/2?refresh
{
  "visittime": "11:00:00",
  "keywords": "[杯]",
  "rank": 20,
  "clicknum": 12,
  "id": 1121,
  "userid": "298219d9073774412",
  "key": "2"
}

配置滚动索引

为了启用滚动索引功能,我们需要为索引别名logs-all指定滚动索引规则。这里设定以下三个滚动条件:

  • 最大年龄(max_age:索引创建至今不超过7天。
  • 最大文档数(max_docs:索引中的文档数量不超过1条。
  • 最大大小(max_size:索引主分片总大小不超过5GB。

当任意一个条件满足时,新数据将写入新索引log2

POST /logs-all/_rollover/log2
{
  "conditions": {
    "max_age":   "7d",
    "max_docs":  1,
    "max_size":  "5gb"
  }
}

上述配置意味着,只要索引数据量达到1条记录,或主分片总大小超过5GB,或创建索引的时间长度超过7天,Elasticsearch就会自动将新的数据写入新索引log2

持续滚动与自动命名索引

随着数据不断增长,当log2的数据量达到阈值时,可以继续创建新的索引(如log3)并重复上述滚动过程。为了简化索引命名,我们可以采用具有递增序列的索引名,如log-000001。这样,当执行滚动操作时,Elasticsearch会自动根据前一个索引名递增尾数生成新索引名。

PUT /log-000001
{
  "aliases": {
    "logseries": {}
  }
}

POST /logseries/_rollover
{
  "conditions": {
    "max_age":   "7d",
    "max_docs":  1,
    "max_size":  "5gb"
  }
}

执行结果解读

执行滚动操作后,Elasticsearch将返回一个包含以下关键信息的响应:

{
  "acknowledged" : false,
  "shards_acknowledged" : false,
  "old_index" : "log-000001",
  "new_index" : "log-000002",
  "rolled_over" : false,
  "dry_run" : false,
  "conditions" : {
    "[max_size: 5gb]" : false,
    "[max_docs: 1]" : false,
    "[max_age: 7d]" : false
  }
}

acknowledged 和 shards_acknowledged 表示操作是否被成功确认和分片是否已确认。

old_index 和 new_index 分别指当前正在使用的索引和即将切换到的新索引。

rolled_over 表示是否已完成滚动,此处为false,说明尚未触发滚动条件。

  • dry_run 说明本次是否为模拟执行,此处为false,表示实际执行了滚动检查。
  • conditions 列出了每个滚动条件及其当前状态,均为false表明当前索引尚未满足任何一个滚动条件。

总结来说,滚动索引结合索引别名的使用,为应对大规模数据集提供了有效解决方案。它允许我们将数据自动分散到多个索引中,根据预设条件动态创建新索引,确保数据规模可控,避免单个索引过大导致的性能问题。通过合理的滚动策略配置,我们可以轻松管理海量数据,同时保持Elasticsearch集群的稳定性和查询效率。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
2天前
|
数据库 索引
Elasticsearch索引别名:管理与优化数据访问
Elasticsearch索引别名:管理与优化数据访问
7 2
|
4天前
|
存储 监控 固态存储
elasticsearch索引生命周期管理(ILM):原理和实践
elasticsearch索引生命周期管理(ILM):原理和实践
|
4天前
|
存储 监控 数据挖掘
Elasticsearch 别名:灵活索引管理的利器
Elasticsearch 别名:灵活索引管理的利器
|
2天前
|
存储 JSON 监控
Elasticsearch索引监控全面解析
Elasticsearch索引监控全面解析
7 0
|
2天前
|
缓存 数据处理 数据安全/隐私保护
Elasticsearch索引状态管理实战指南
Elasticsearch索引状态管理实战指南
6 0
|
2天前
|
数据安全/隐私保护 网络架构 索引
Elasticsearch索引数据的路由规则与自定义路由分发
Elasticsearch索引数据的路由规则与自定义路由分发
5 0
|
2天前
|
API 网络架构 索引
Elasticsearch索引中数据的增删改查与并发控制
Elasticsearch索引中数据的增删改查与并发控制
9 0
|
2天前
|
存储 自然语言处理 数据库
使用Elasticsearch映射定义索引结构
使用Elasticsearch映射定义索引结构
10 0
|
2天前
|
存储 索引
Elasticsearch索引之嵌套类型:深度剖析与实战应用
Elasticsearch索引之嵌套类型:深度剖析与实战应用
|
3天前
|
存储 JSON 定位技术
深入理解Elasticsearch的索引映射(mapping)
深入理解Elasticsearch的索引映射(mapping)