ES-08-ElasticSearch数据分片(shard)

news/2023/12/2 10:04:16

说明

  • ElasticSearch数据分片(shard)
  • 创建多分片索引、更改多分片索引副本分片数量、路由计算和分片控制
  • 官方文档:https://www.elastic.co/cn/

核心概念

》什么是数据分片(shard)?

  • 一个分片是一个底层的工作单元 ,它仅保存了全部数据中的一部分,一个分片是一个Lucene的实例,它本身就是一个完整的搜索引擎。我们的文档被存储和索引到分片内,但是应用程序是直接与索引而不是与分片进行交互。
  • Elasticsearch 是利用分片将数据分发到集群内各处的。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。当你的集群规模扩大或者缩小时,Elasticsearch会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里。
  • 主分片:在索引建立的时候就已经确定了主分片数,但是副本分片数可以随时修改,索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量。
  • 副分片:一个副本分片只是一个主分片的拷贝。副本分片作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务。

》如何创建多分片索引?

  • 创建索引时不提交分片参数默认是创建一个主分片和一个副本分片(要创建副本分片至少两台节点)
  • 可以指定参数规定分为几个主分片和副本
  • 创建索引时定义主分片数量后以后无法更改,但是副本数量可以更改

》路由计算和分片控制

  • 既然数据是被分别存储在不同的分片中,那么ES是如何定位数据到底存放在哪个分片的呢?
  • 路由计算
    • 公式:hash(<文档id>) % <主分片数量>(如果有3个分片,最终结果必然=0、1、2)
  • 分片控制
    • 用户可以访问任何一个节点获取数据,该节点被称为协调节点
  • 写数据
    • 写数据时也是靠这个协调节点做路由的,先计算出数据所属分片,然后路由到相关分片所在节点进行写数据,然后找到副本进行数据复制,最终反馈结果
  • 读数据
    • 类似写数据

》分片策略

  • 合理设置分片数
    • 一个分片底层即为一个Lucene索引,会消耗一定的文件句柄、内存、CPU
    • 索引创建的时候分片就已经被设定好了,后期无法动态改变
    • 控制每个分片占用硬盘容量不超过ES最大JVM堆空间设置,一般对打32G
    • 通常遵循这个公式:节点数 <= 主分片数 * (副本分片数 + 1)

常用操作

》创建多分片索引

  • 请求参数说明

    • number_of_shards:主分片数量
    • number_of_replicas:副本数量
  • 请求示例

    • 请求方式:PUT

    • 发送请求:

      curl -X PUT http://192.168.3.201:9201/index001 -H 'Content-Type:application/json' -d'
      {"settings": {"number_of_shards": 3,"number_of_replicas": 1} 
      }'
      
    • 响应结果:

      {"acknowledged": true,"shards_acknowledged": true,"index": "index001"
      }
      

》更改多分片索引副本分片数量

  • 请求示例

    • 请求方式:PUT

    • 发送请求:

      curl -X PUT http://192.168.3.201:9201/index001 -H 'Content-Type:application/json' -d'
      {"number_of_replicas": 2
      }'
      
    • 响应结果:

      {"acknowledged": true
      }
      

http://www.ppmy.cn/news/131444.html

相关文章

ES-09-ElasticSearch分词器

说明 ElasticSearch分词器默认分词器&#xff08;标准分词器&#xff09;、ik分词器、ik分词器扩展字典自定义词语关键词&#xff1a;keyword、text、ik_max_word、ik_smart、词条、词典、倒排表官方文档&#xff1a;https://www.elastic.co/cn/ik分词器文档&#xff1a;https…

Elasticsearch8.0

Elastic 中国社区官方博客_CSDN博客-Elastic,Elasticsearch,Kibana领域博主Elastic 中国社区官方博客擅长Elastic,Elasticsearch,Kibana,等方面的知识https://elasticstack.blog.csdn.net/ ✅ 启动 elasticsearch # cd /usr/local/elastic/elasticsearch/ # ./bin/elasticsearc…

ES6/ES7/ES8/ES9/ES10

ES10 ES10 功能完全指南 好犯困啊 我来打打字 string.prototype.matchAll() ‘Hello’.match(‘l’) eg:判断字符串中存在几个某元素 yannanna’.match(/n/g).length 扁平化多维数组&#xff08;想不出啥时候会用到&#xff09; let array [1, 2, 3, 4, 5]; array.map(x &g…

ES

文章目录 1. 什么是ElasticSearch&#xff1f;为什么要使用Elasticsearch?——克服模糊查询的缺点、查询速度快2. ES中的倒排索引是什么&#xff1f;——词→文章3. ES是如何实现master选举的&#xff1f;——各节点分别排序投票4. 如何解决ES集群的脑裂问题——增大最少候选节…

es 客户端

ES客户端&#xff1a;Elasticsearch Clients 语言无关性 Java REST ClientJava APIPython APIGo API.Net APIPHP APIJavaScripts APIRuby APIPerl APIElandRustCommunity Contributed Clients Java API 生命周期&#xff08;生卒年&#xff1a;ES 0.9 - ES 7.x&#xff09;…

ES7,ES8,ES10新特性

ES7 ES7在ES6的基础上增加了三项内容 求幂运算符 ** console.log(3 ** 2 ) // 9 Array.prototype.includes()方法 includes()的作用是查找一个值在不在数组中&#xff0c;接受两个参数&#xff1a;搜索值和搜索的开始索引。如果没有传递参数默认的索引是0 // 下面的这两种方…

ES7+ES8

撰文为何 身为一个前端开发者&#xff0c;ECMAScript(以下简称ES)早已广泛应用在我们的工作当中。了解ECMA机构流程的人应该知道&#xff0c;标准委员会会在每年的6月份正式发布一次规范的修订&#xff0c;而这次的发布也将作为当年的正式版本。以后的改动&#xff0c;都会基于…

elasticsearch系列七:ES Java客户端-Elasticsearch Java client

一、ES Client 简介 1. ES是一个服务&#xff0c;采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式 3.1 REST API &#xff0c;端口 9200 这种连接方式对应于架构图中的RESTful style API这一层&#xff0c;这种客户端的连接方式是RESTful风格的&#xff0c;使用http…

【阅读理解】ES7/ES8/ES9/ES10新特性

今天阅读了一篇咨询&#xff0c;有关于ES7-ES10 &#xff08;ES2016-2019&#xff09;&#xff0c;ES6后新出的特性比较频繁。 首先附上思维导图 下面都是我阅读咨询后理解而编写的&#xff1a; ES7&#xff1a; 1.Array.prototype.includes() 这个方法可以判断一个元素…

ES7.8 安装

环境 CentOS7.4 elasticsearch-7.8.0 jdk8 下载Linux版本的elasticsearch安装包 https://www.elastic.co/cn/downloads/past-releases 安装集群在每个节点上的安装步骤基本上都是一样的&#xff0c;我以一个节点为例 下载完成之后通过ftp上传到linux服务器指定目录下&am…

ES7、ES8、ES9、ES10、ES11新特性

一、ES7新特性 1. Array.prototype.includes includes 方法用来检测数组中是否包含某个元素&#xff0c;返回布尔值 2. 指数操作符 指数运算符 ** &#xff0c;用来实现幂运算&#xff0c;功能与 Math.pow 结果相同 二、ES8新特性 1. async 和 await async 和 await 两种…

ES7、ES8、ES9、ES10新特性

ES7新特性 1.Array.prototype.includes()方法 在ES6中我们有String.prototype.includes()可以查询给定字符串是否包含一个字符,而在 ES7 中,我们在数组中也可以用 Array.prototype.includes 方法来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回true,否则返…

ES7-ES12

includes fromIndex 可选, 从fromIndex 索引处开始查找 valueToFind。如果为负值&#xff08;即从末尾开始往前跳 fromIndex 的绝对值个索引&#xff0c;然后往后搜寻&#xff09;。默认为 0。 arr.includes(valueToFind,[fromIndex]) 想求2的10次方 console.log(Math.pow…

前端ES系列

【 ES6~ES13】 文章目录 【 ES6~ES13】1、ES6常用的特性一.var、let、const之间的区别以及和闭包的关联二.箭头函数和普通函数的区别以及this的指向三.Promise1.简述Promise原理2.Promise的方法then,catch,finally3.async 和 await 四.Proxy 和defineProperty 以及两者区别使用…

ES7和 ES8 一览

ES7 Array.prototype.includes 在es5 或者 es6 中我们要判断数组中是否包含某个元素我们需要用到Array.prototype.indexOf,在es7中加入了 arr.includes(searchElement, fromIndex) 以前我们需要这么写 let arr [react, angular, vue] // Correct if (arr.indexOf(react) !…

ES7与ES8特性

我曾写过一篇关于ES6博客《10个最佳ES6特性》&#xff0c;这次我打算聊聊ES7和ES8特性。 ES7只有2个特性: includes()指数操作符 ES8尚未发布(2017年1月)&#xff0c;下面是它已经完成起草的一些特性&#xff1a; Object.values()Object.entries()padStart()padEnd()Object…

ES7, ES8

文章目录 前言一、ES7&#xff08;一&#xff09; includes() 二、ES8&#xff08;一&#xff09;Object.values()1. 意义&#xff1a;遍历对象对的属性值&#xff0c;需要通过属性名key去获取属性值2. 例如&#xff1a;-->ES8前-->ES8后 &#xff08;二&#xff09;Obje…

Elasticsearch:使用标准 Java HTTP 的集成 - Elastic Stack 8.x

Elasticsearch 功能可以通过多种方式轻松集成到任何 Java 应用程序中&#xff0c;通过 REST API 或通过本机 API。 在 Java 中&#xff0c;很容易使用许多可用库之一调用 REST HTTP 接口&#xff0c;例如 Apache HttpComponents 客户端&#xff08;有关更多信息&#xff0c;请参…

ES6, ES7, ES8, ES9 以及 ES10 新特征

目录 1. ES6 新特征 (2015) 1.1 module 1.1.1 export 1.1.2 import 1.2 Arrow function (箭头函数) 1.2.1 箭头函数结构 1.3 默认参数 1.4 模板字符串 1.5. 解构赋值 1.5.1数组的结构赋值 1.5.2 对象解构赋值 1.6 扩展运算符 1.7Promise(异步) 2 ES7新特征 (2016…

【ES】elasticsearch常见报错(服务端)

elasticsearch常见报错 _search 操作响应错误Cannot search on field [xxxxx] since it is not indexed.unknown type for collapse field ‘xxx’, only keywords and numbers are accepted _search 操作响应错误 Cannot search on field [xxxxx] since it is not indexed. …
最新文章