利用滚动索引来管理海量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集群的稳定性和查询效率。

相关推荐
Hello.Reader8 分钟前
Flink Source/Sink 的 Exactly-Once、At-Least-Once 到底意味着什么?
大数据·flink
智驱力人工智能17 分钟前
守护矿山动脉 矿山皮带跑偏AI识别系统的工程化实践与价值 皮带偏离检测 皮带状态异常检测 多模态皮带偏离监测系统
大数据·人工智能·opencv·算法·安全·yolo·边缘计算
binbinaishijie8832 分钟前
Matlab读取CSV数据并处理实战指南:从入门到精通
大数据·数据库·其他·matlab
数琨创享TQMS质量数智化42 分钟前
数琨创享成功入选江苏省首批入库培育数据企业,踏入数智发展新征程
大数据
未定义.2211 小时前
第1篇:0基础入门!Python+Selenium环境搭建与第一个自动化脚本
python·功能测试·selenium·自动化·jenkins·pytest
WLJT1231231232 小时前
接插件:电子系统的连接核心与产业赋能
大数据·人工智能·科技·安全·生活
无心水2 小时前
2026全球与中国形势深度解析:政治格局、经济金融、科技突破与国家规划(附数据图表)
大数据·科技·金融
郑州光合科技余经理2 小时前
私有化B2B订货系统实战:核心模块设计与代码实现
java·大数据·开发语言·后端·架构·前端框架·php
xindoo2 小时前
最近AI领域爆火的 Agent Skills 是什么?
大数据·人工智能
脑壳疼___2 小时前
springAi集成es向量库
大数据·elasticsearch·搜索引擎