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

相关推荐
Altair澳汰尔19 分钟前
成功案例丨平衡性能与安全的仿真:Altair助力 STARD 优化赛车空间车架设计
大数据·人工智能·仿真·fea·有限元分析·cae
AI优秘企业大脑2 小时前
需求洞察助力战略规划实现潜在市场机会
大数据·人工智能
罗不俷2 小时前
【Hadoop】Hadoop核心基础——YARN 框架架构与运行机制(Hadoop 集群的 “资源管家”)
大数据
小小王app小程序开发5 小时前
上门家政小程序用户激励机制分析:用 “利益 + 情感” 双驱动,解锁高复购增长密码
大数据·小程序
LSL666_8 小时前
5 Repository 层接口
android·运维·elasticsearch·jenkins·repository
武汉唯众智创11 小时前
高职院校大数据软件教学实训室建设方案
大数据·大数据实训室·大数据实验室·大数据软件教学实训室·大数据教学实训室
Elastic 中国社区官方博客11 小时前
Elasticsearch:如何为 Elastic Stack 部署 E5 模型 - 下载及隔离环境
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
qqxhb12 小时前
系统架构设计师备考第68天——大数据处理架构
大数据·hadoop·flink·spark·系统架构·lambda·kappa
思通数科多模态大模型12 小时前
扑灭斗殴的火苗:AI智能守护如何为校园安全保驾护航
大数据·人工智能·深度学习·安全·目标检测·计算机视觉·数据挖掘
high201112 小时前
【Git】-- Rebase 减少 Commit 次数指南
大数据·git·elasticsearch