ES索引切分

news2024/10/7 12:20:34

提示:对于一些日志类的数据,我们常用到es作为存储,数据量过大时,可能会用到索引切分,这里可以参考

ES索引切分

  • 前言
  • 方案一:ES索引切分验证(policy策略)
        • 配置ilm策略 (max_docs = 1 测试用)
        • 查询ilm策略
        • rollover检测索引策略默认10min - 配置为3s 测试
        • 创建索引模板
        • 创建索引,指定别名
        • 使用别名插入数据
        • 解决方案
          • 多模板多别名同策略模式
  • 方案二:多别名,rollover方式
        • 创建公共索引模板
        • 创建索引
        • 数据插入
        • 索引切分
  • 总结


前言

在生产项目中,由于ElasticSearch单个索引数据量大,索引中部分数据不常用,在搜索和写入文档时,效率较低。为了减小单个索引的数据量,提升搜索和文档写入效率,将大索引根据一定的规则拆分为小的索引。


直接上干货,不多bb(记得点赞,收藏,是我最大的动力)

方案一:ES索引切分验证(policy策略)

配置ilm策略 (max_docs = 1 测试用)

  • Ilm策略和模板搭配使用,模板引用此策略
PUT _ilm/policy/das_v5_policy
{
  "policy":{
    "phases": {
      "hot": {
        "actions": {
          "set_priority": {
            "priority": 100
          },
          "rollover": {
            "max_age": "1d",
            "max_docs": 1,
            "max_size": "5gb"
          }
        }
      }
    }
  }
}

查询ilm策略

GET _ilm/policy

rollover检测索引策略默认10min - 配置为3s 测试

PUT _cluster/settings
{
  "transient": {
    "indices.lifecycle.poll_interval":"3s"
  }
}

创建索引模板

说明:创建索引模板,具体的_mapping根据审计日志确定
das_v5_policy 为指定 策略名称
das_v5_index 滚动触发的别名

PUT _template/das_v5_template
{
  "index_patterns":["das_v5_*"],
  "settings":{
    "number_of_shards":2,
    "number_of_replicas":0,
    "index.lifecycle.name":"das_v5_policy",
    "index.lifecycle.rollover_alias":"das_v5_index "
  }, 
  "mappings": {
    "properties": {
      "name":{
      "type":"keyword"
    },
    "age":{
      "type":"long"
    }
    }
  }
}

创建索引,指定别名

说明:创建索引,指定别名,允许索引写入数据

PUT das_v5_20210121-000001
{
  "aliases": {
    "das_v5_index": {
      "is_write_index":true
    }
  }
}

使用别名插入数据

说明:每次put数据,会产生一个新的索引

POST das_v5_index/_doc
{
  "name":"yxd",
  "age":17
}

第一次put数据
在这里插入图片描述
策略配置3秒检测一次,所以3秒后再次put结果:
在这里插入图片描述索引自动滚动,验证成功,由 03 变成 04

仔细研究,发现存在一个问题

  1. 使用策略进行维护管理索引,需要配置好模板- 模板和策略关联,必须使用别名
  2. 历史数据问题:
    • Rollover控制索引滚动,写入数据使用别名写入,那么使用别名写入时,无法向历史索引写入数据
    • 手动使用指定历史索引写入数据,不使用别名,那么索引无法自动进行切分,策略不会生效

在这里插入图片描述
如上图所示:

  1. 此时别名das_v5_index 已经滚动到das_v5_20200123_02索引上
  2. Write通过别名无法向索引das_v5_20200122_02写入数据

解决方案

多模板多别名同策略模式

① 创建日期模板 YYYYMM 日期替换

PUT _template/das_v5_template_YYYYMM
{
  "index_patterns":["das_v5_YYYYMM*"],
  "settings":{
    "number_of_shards":2,
    "number_of_replicas":0,
    "index.lifecycle.name":"das_v5_policy",
    "index.lifecycle.rollover_alias":"das_v5_index_YYYYMM"
  }, 
  "mappings": {
    "properties": {
      "name":{
      "type":"keyword"
    },
    "age":{
      "type":"long"
    }
    }
  }
}

② 创建该日期符合索引模板的索引,并配置日期格式别名

PUT das_v5_YYYYMM-000001
{
  "aliases": {
    "das_v5_index_YYYYMM": {
      "is_write_index":true
    }
  }
}

③ 使用别名插入当天数据

POST das_v5_index_YYYYMM/_doc
{
  "name":"yxd",
  "age":17
}

④ 如果索引模板多了,可删除N天之前的模板

DELETE _Template/ das_v5_index_YYYYMM

备注:重复put索引,产生异常,可能导致策略无法维护索引,集群部署状态下,可能要考虑相关问题

方案二:多别名,rollover方式

该方案为:

  1. 创建一个独立公用的索引模板

  2. 使用日期滚动创建索引,并使用别名(一次可创建多个索引/别名,未来几天的)

    实现:可通过定时任务,每天凌晨执行,创建未来几天要用到的索引
    
  3. 代码每次提交写入es数据之后, Rollover 检测滚动一次

创建公共索引模板

代码如下(示例):

在这里插入图片描述

创建索引

说明:定时任务,执行创建日期-索引并使用日期别名,查询也可使用日期别名
在这里插入图片描述

数据插入

说明:程序插入数据,只需要使用日期别名,插入数据到es即可,历史数据使用历史当天日期的别名插入
在这里插入图片描述

索引切分

第一种
每次数据插入提交之后,可代码手动rollover一次

第二种
定时任务管理rollover,查询最近几天的索引,定时检测切分,可每10分钟一次(一二种,可同时用)
在这里插入图片描述


总结

推荐使用方案二:
优点

  1. 简单好用,不用担心集群部署等会出现的问题
  2. 查询也可使用别名
  3. 索引切分方式灵活,可靠
  4. 插入历史数据等,都可使用别名插入,不用做多余的开销维护

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/154314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

照片如何修复清晰度?这些修复方法值得你收藏

我们都知道以前的拍照技术落后,拍摄出来的照片像素都比较低,从而导致照片有些模糊不清,再加上我们保存不当,很多旧照片都变得模糊破损,因此很多人为了不让这些旧照片消失,都会选择找人来修复这些旧照片&…

爬虫 大规模数据 采集心得和示例

本篇主要介绍网站数据很是大的采集心得数据库1. 什么样的数据才能称为数据量大:编程我以为这个可能会由于每一个人的理解不太同样,给出的定义 也不相同。我认为定义一个采集网站的数据大小,不单单要看这个网站包括的数据量的大小,…

MySQL高级【锁】

1:锁的概述锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、 RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有 效性是所有数据库必…

基于java springmvc+mybatis酒水商城管理系统设计和实现

基于java springmvcmybatis酒水商城管理系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取…

5.7、TCP 可靠传输的实现

1、TCP基于以字节为单位的滑动窗口来实现可靠传输 TCP 基于以字节为单位的滑动窗口\color{red}以字节为单位的滑动窗口以字节为单位的滑动窗口来实现可靠传输 如下所示,假定数据传输只在一个方向进行 这是发送方待发送字节的序号 假设发送方收到了来自一个接收方的…

RHCE第六天之DNS域名解析服务器详解

文章目录一、 域名解析服务器介绍二、DNS域名解析的过程三、搭建DNS服务器的详细配置四、实验练习一、 域名解析服务器介绍 DNS(Domain Name System) 是互联网上的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够…

Node转换Excel成JSON

目前想使用Cocos Creator做一个文字游戏,类似于我的人生重开模拟器。 那么其中最重要的一点就是关于数据的存储了。在我的人生重开模拟器中大部分事件和天赋的数据是存储在excel表格当中的,当然如果要使用Cocos Creator,因为我不准备布置服务…

JDBC核心技术_第8章:数据库连接池

目录8.1 JDBC数据库连接池的必要性8.2 数据库连接池技术8.3 多种开源的数据库连接池8.3.1 C3P0数据库连接池8.3.2 DBCP数据库连接池8.3.3 Druid(德鲁伊)数据库连接池8.1 JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模…

【蓝桥杯系列】2020省赛真题之回文日期

⭐️前面的话⭐️ 本篇文章介绍来蓝桥杯真题之回文日期的题解,展示语言java。 📒博客主页:未见花闻的博客主页 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📌本文由未见花闻原创&#xff0c…

ArcGIS基础实验操作100例--实验81创建点群最小边界几何

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验81 创建点群最小边界几何 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff0…

MySQL是怎么保证高可用的?

在上一篇文章中,我和你介绍了 binlog 的基本内容,在一个主备关系中,每个备库接收主库的 binlog 并执行。 正常情况下,只要主库执行更新生成的所有 binlog,都可以传到备库并被正确地执行,备库就能达到跟主库一致的状态,这就是最终一致性。 但是,MySQL 要提供高可用能力…

Python中zipfile压缩包模块的使用

本文主要介绍了Python中zipfile压缩包模块的使用,zipfile 模块提供了创建、读取、写入、添加及列出 ZIP 文件的工具,本文做一个简单的总结。 简介 ZIP 文件格式是一个常用的归档与压缩标准,zipfile 模块提供了创建、读取、写入、添加及列出 …

如何通过QA质量管理提高软件质量?

1、构建了质量检查系统 为了保证软件开发质量,一般来说QA检查单按照检查阶段划分为:需求分析、系统设计、系统实现、系统测试、交付验收、系统运维。 QA质量管理:CoCode项目管理 QA质量管理——QA检查单​ 为了进一步提高检查效果&…

【笔记:第4课】学习开发一个RISC-V上的操作系统 - 汪辰 - 2021春

文章目录前言来源正文小结前言 创作开始时间:2023年1月10日22:41:26 如题,学习一下RISC-V。 来源 https://www.bilibili.com/video/BV1Q5411w7z5?p4&vd_source73a25632b4f745be6bbcfe3c82bb7ec0 正文 操作系统:POSIX 标准。 LLVM有…

ArcGIS基础实验操作100例--实验80随机采样统计

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验80 随机采样统计 目录 一、实验背景 二、实验数据 三、实验步骤 (1&…

2022年度总结——一切都在慢慢变好

人生天地之间,若白驹过隙,忽然而已,每个人都希望留下自己的足迹。——题记日月两盏灯,春秋一场梦。回想一年前的现在我在干什么呢?去年的寒假我刚步入大学一个学期,迷茫彷徨,怅然若失&#xff0…

Promise处理异步的并行和串行

一、异步的“并行” 同时处理,相互之间没啥依赖 // 执行FN1返回一个promise实例,实例中管理了一个异步编程的代码,当定时器到时间后,才会把实例的状态改为成功 const fn1 () > {return new Promise(resolve > {setTimeou…

nginx使用!

一:概述 Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 Nginx 网站用户有:百度、京…

NTN(二) Timing Advance

微信同步更新欢迎关注同名modem协议笔记 地面移动系统的传播延迟通常小于 1 毫秒。 相比之下,NTN 中的传播延迟要长得多,延迟从几毫秒到数百毫秒不等,具体取决于星载或机载平台的高度以及 NTN 中的payload类型。 因此对NTN系统,处…

Java 脚本引擎的使用

1. 前言 Java 6 版本就已经引入了 Rhino 引擎用以支持脚本代码运行,而从 Java 8 开始 Nashorn 取代 Rhino 成为 Java 内嵌的 JavaScript 引擎。Nashorn 引擎允许开发人员将 JavaScript 代码嵌入到 Java 中执行,这个特性在复杂的配置系统中有比较大的应用…