elasticsearch索引怎么设计

Primary Shard(主分片)

Primary Shard(主分片)是索引数据存储的基本单位,承担着数据写入和查询的职责。以下是关于Primary Shard的一些关键点:

1. 数据分布:每个索引在创建时会被分成多个主分片,这些主分片分布在不同的节点上,以此来实现数据的分布式存储和水平扩展。主分片的数量在索引创建时设定并且之后不能更改
2. 数据写入:当新的文档被写入Elasticsearch时,首先会被写入到对应的主分片中。这个过程涉及到文档的索引、分析以及存储。
3. 容错机制:主分片的存在也提供了故障恢复的能力。如果某个节点发生故障,其上的主分片可以在其他节点上通过副本分片(Replica Shard)自动重新分配,保证数据的可用性。
4. 查询路由:查询操作首先会路由到相关的主分片或其副本上执行,然后汇总结果返回给客户端。这意味着查询负载可以被主分片及其副本共同分担,提高了查询效率。
5. 数据恢复与再平衡:在集群扩容或缩容时,Elasticsearch会自动对主分片进行再平衡,以优化数据分布。此外,在节点故障后,未分配的主分片会触发故障转移机制,确保数据的完整性和服务的连续性。
6. 不可变性:一旦主分片中的数据被写入,它就被视为不可变的。任何更新或删除操作实际上都是通过新增一个文档版本来实现的,旧版本的文档最终会在段合并过程中被标记为已删除。

ElasticSearch 索引设计

1. 基于时间对Index进行分割

根据时间间隔与数据产生时间将数据写入不同的Index中,为了易于区分,会在Index的名字中加上对应的时间标识。

常见的间隔有小时、天、周和月:先考虑总共要存储多久的数据,然后选一个既不会产生大量Index又能够满足一定灵活性的间隔,比如你需要存储6个月的数据,那么一开始选择“周”这个间隔就会比较合适。考虑业务增长速度:假如业务增长的特别快,比如上周产生了1亿数据,这周就增长到了10亿,那么就需要调低这个间隔来保证有足够的弹性能应对变化。

2. 分片与副本策略

合理分配分片数量,过多的分片会增加管理和查询的复杂度,太少则可能限制水平扩展能力。Elastic专家根据经验总结出来大家普遍认为:单个Shard的存储大小不超过30GB。

评估分片数量:单个Index的Primary Shard个数 = k * 数据节点个数。(key为小整数:1~2)

合理设置副本,一个或多个副本可以提供高可用性和负载均衡。

3. 映射定义(Mapping)

生产环境下需要禁用动态映射,明确定义字段的数据类型,避免动态映射可能导致的性能问题和数据不一致。使用合适的数据类型,例如使用keyword类型存储精确值,使用text类型并配合分析器处理全文搜索。应用字段长度限制,避免过大的文档导致内存溢出。利用norms、doc_values等属性优化存储和查询性能。

4. 分析器(Analyzer)

分词器的主要作用将用户输入的一段文本,按照一定逻辑,分析成多个词语的一种工具,顾名思义,文本分析就是把全文本转换成一系列单词(term/token)的过程,也叫分词。

根据内容选择合适的分析器,创建索引时指定分词器,搜索时指定analyzer查询参数。

5. 索引模板(Index Templates)

把已经创建好的某个索引的参数设置(settings)和索引映射(mapping)保存下来作为模板,在创建新索引时,指定要使用的模板名,就可以直接重用已经定义好的模板中的设置和映射。

如果你需要每间隔一定的时间就建立一次索引,你只需要配置好索引模板,以后就可以直接使用这个模板中的设置,不用每次都设置settings和mappings。

6. 生命周期管理(ILM)

设定索引的生命周期策略,自动进行滚动、归档和删除,管理索引的存储和成本。

所以,前期投入时间进行细致的索引设计是必要的,它不仅能够提升系统的整体性能,还能简化后续的维护工作,降低长期运营成本,确保系统稳定可靠地服务于业务需求。

参考:6000+字讲透ElasticSearch 索引设计 -阿里云开发者社区 (aliyun.com)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt通过句柄获取其它进程控件实例

1.通过spy获取想要获取控件的句柄id 通过spy获取另一个软件的文本框的句柄 2.Qt写代码, 根据句柄获取文本框的内容 void getTextFromExternalWindow(HWND hwnd) {const int bufferSize 256;TCHAR buffer[bufferSize];// 获取窗口文本内容int length GetWindowT…

14.优化算法之BFS解决FloodFill算法1

0.FloodFill简介 dfs:深度优先遍历(红色) bfs:宽度优先遍历 1.图像渲染 算法原理 class Solution {int[] dx { 0, 0, 1, -1 };int[] dy { 1, -1, 0, 0 };public int[][] floodFill(int[][] image, int sr, int sc, int color)…

超快的 Python 包管理工具「GitHub 热点速览」

天下武功,无坚不破,唯快不破! 要想赢得程序员的欢心,工具的速度至关重要。仅需这一优势,即可使其在众多竞争对手中脱颖而出,迅速赢得开发者的偏爱。以这款号称下一代极速 Python 包管理工具——uv 为例&…

Facebook:数字社交的引领者与创新者

自2004年诞生以来,Facebook从一个校园网络项目迅速成长为全球最大的社交媒体平台,彻底改变了我们与世界互动的方式。作为数字社交的引领者和创新者,Facebook不仅在技术层面上不断突破,也在社会和文化领域留下了深刻的印记。本文将…

自定义Python工具箱实现mdb转出为shp或gdb格式----终章(工具免费)

一、内容提示 前边几篇文章,介绍了mdb地理数据库结构解析、mdb转出为shp示例,以及mdb转为gdb的几种技术路线探讨,并未对mdb转出为shp、或gdb格式进行完整实现。 为了方便使用,并支持更加复杂的使用场景,小编已将前边几…

【Elasticsearch】Elasticsearch动态映射与静态映射详解

文章目录 📑前言一、Elasticsearch 映射概述1.1 什么是映射?1.2 映射的分类 二、动态映射2.1 动态映射的定义2.2 动态映射的优点2.3 动态映射的缺点2.4 动态映射的应用场景2.5 动态映射的配置示例 三、静态映射3.1 静态映射的定义3.2 静态映射的优点3.3 …

进阶测开日常积累 —— 性能测试!

背景: 这次来解释一下,为什么我那么多回答都不建议大家花太多时间去学性能,建议都是简尝即可呢~具体看正文,说一下性能测试相关的东西~就好了 对于新手太不友好了,所以别花这个时间~~而且很多大多中小企业&#xff0…

vue3单个页面进行防抖节流

防抖 <template><button id"submitButton" ref"submitButton">GET</button> </template><script lang"ts" setup> import { ref, onMounted } from vue;// 防抖函数 function debounce(func: () > void, dela…

企业出海的浪潮下,如何利用亚马逊云(AWS)更好地应对?

在全球化的浪潮下&#xff0c;越来越多的企业开始将目光投向国际市场。在这个数字化时代&#xff0c;云计算技术成为企业出海的必备利器之一。AWS云作为全球领先的云服务提供商&#xff0c;凭借其卓越的性能和完善的服务体系&#xff0c;成为众多企业出海的首选。 一、出海为什…

【DataSophon】DataSophon1.2.1服务组件开启 kerberos

目录 一、DataSophon是什么 1.1 DataSophon概述 1.2 架构概览 1.3 设计思想 二、集成组件 三、环境准备 四、安装kerberos服务 4.1 Zookeeper 4.2 HDFS 4.3 HBase 4.4 YARN 4.5 hive 【DataSophon】大数据管理平台DataSophon-1.2.1安装部署详细流程-CSDN博客 【Da…

什么是未授权访问漏洞?Hadoop Redis靶场实战——Vulfocus服务攻防

什么是未授权访问漏洞&#xff1f;Hadoop & Redis靶场实战——Vulfocus服务攻防 一、介绍 未授权访问&#xff0c;也称为未经授权的访问或非法访问&#xff0c;是指在没有得到适当权限或授权的情况下&#xff0c;个人或系统访问了网络、计算机、数据库、文件、应用程序或…

《安富莱嵌入式周报》第339期:单片机运行苹果早期Mac系统模拟器,2GHz示波器有源探头,下一代矩阵开关面包板,卡片式声音分贝器,HP经典示波器,ReRAM

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版 https://www.bilibili.com/video/BV1Kf421Q7Lh 《安富莱嵌入式周报》第339期&#xff1a;单片机运行苹果早期Ma…

用python画蜡笔小新

代码地址: https://pan.quark.cn/s/6ae646d2fef3

Java知识点大纲

文章目录 第一阶段&#xff1a;JavaSE1、面向对象编程(基础)1)面向过程和面向对象区别2)类和对象的概述3)类的属性和方法4)创建对象内存分析5)构造方法(Construtor)及其重载6)对象类型的参数传递7)this关键字详解8)static关键字详解9)局部代码块、构造代码块和静态代码块10)pac…

mac中如何恢复因为破解脚本导致的IDEA无法启动的问题

问题 为了在mac中安装免费的2024版idea&#xff0c;导致下载了一个脚本&#xff0c;使用这个脚本后&#xff0c;但是发现idea还没有破解&#xff0c;相反导致idea无法启动&#xff0c;每次点击&#xff0c;都会弹出“cannot start IDE…” 问题排查 在访达中点击mac的应用程…

营销故事之扩大牙膏开口

职场营销故事“扩大牙膏开口”又可以说是“牙膏开口扩大1毫米”&#xff0c;为十大经典营销故事之一。某品牌的牙膏&#xff0c;包装精美&#xff0c;品质优良&#xff0c;备受顾客喜爱&#xff0c;连续10年营业额保持10%-20%的增幅。可到了第11年&#xff0c;销售业绩却停滞不…

MySQL环境搭配

下载版本37滴 下载第二个 之后进行安装 进入安装界面 next 选择默认的 进行下一步 安装成功后&#xff0c;进行一系列配置&#xff0c;成功界面如下&#xff1a; 配置 MySQL8.0 环境变量 如果不配置 MySQL 环境变量&#xff0c;就不能在命令行直接输入 MySQL 登录命令。 步…

PowerDsigner的简单使用

目录 1.PowerDesinger 2.PD与navicat的区别&#xff1a; 3.使用 1.PowerDesinger 在实际开发中&#xff0c;数据库的设计会使用专业的建模工具——PowerDesinger &#xff08;安装及其破解大家搜选相关CSDN博客吧&#xff09; 2.PD与navicat的区别&#xff1a; navicat是…

电阻式无功负载组(即电阻式感性负载组)

RL系列电阻式无功负载组&#xff08;即电阻式感性负载组&#xff09;可以通过设置特定功率因数&#xff08;pf&#xff09;来模拟电力系统中的电机负载和电磁器件以及纯阻性负载。电阻式无功负载组是需要额定kVA、额定功率因数和额定电流测试的关键任务备用应急电源系统定期进行…

Mybatis-01 原理

一. JDBC式编程 在 jdbc 编程中&#xff0c;我们最常用的是 PreparedStatement 式的编程&#xff0c;我们看下面这个例子&#xff1b; Connection conn null; PreparedStatement ps null; ResultSet rs null;try {// 1. 注册驱动Class.forName("com.mysql.jdbc.Drive…