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

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

创建初始索引与索引别名

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

bash 复制代码
PUT /log1
{
  "aliases": {
    "logs-all": {}
  }
}

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

bash 复制代码
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

bash 复制代码
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会自动根据前一个索引名递增尾数生成新索引名。

bash 复制代码
PUT /log-000001
{
  "aliases": {
    "logseries": {}
  }
}

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

执行结果解读

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

json 复制代码
{
  "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
  }
}
  • acknowledgedshards_acknowledged 表示操作是否被成功确认和分片是否已确认。
  • old_indexnew_index 分别指当前正在使用的索引和即将切换到的新索引。
  • rolled_over 表示是否已完成滚动,此处为false,说明尚未触发滚动条件。
  • dry_run 说明本次是否为模拟执行,此处为false,表示实际执行了滚动检查。
  • conditions 列出了每个滚动条件及其当前状态,均为false表明当前索引尚未满足任何一个滚动条件。

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

相关推荐
Java程序之猿4 分钟前
Spring Boot 集成spring-boot-starter-data-elasticsearch
spring boot·elasticsearch·jenkins
PcVue China34 分钟前
PcVue助力立讯:精密制造的智能化管控实践!
大数据·人工智能·制造
Data-Miner39 分钟前
158页PPT | 某大型研发制造集团信息化IT规划整体方案
大数据·制造
Elasticsearch1 小时前
如何增加 Elasticsearch 中的 primary shard 数量
elasticsearch
阿里云大数据AI技术1 小时前
阿里云 Elasticsearch Serverless 检索增强型 8.17 版来袭!
大数据·elasticsearch·serverless
反向跟单策略1 小时前
期货跟单软件云端部署的重要性
大数据·数据分析·区块链
卓豪终端管理1 小时前
如何安全地管理固定功能设备?
java·大数据·开发语言·网络·人工智能·安全
chat2tomorrow2 小时前
如何构建类似云数据仓库 Snowflake 的本地数据仓库?
大数据·数据仓库·低代码·数据治理·snowflake·sql2api
孟意昶3 小时前
大数据面试问答-HBase/ClickHouse
大数据·面试·hbase
atbigapp.com3 小时前
DeepSeek在数据仓库的10大应用场景
大数据·数据库·人工智能