热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

ES搜索引擎的分片数、副本数分配算法

ES搜索引擎的分片数、副本数分配算法-名词定义分片一个分片是一个底层的工作单元,它仅保存了全部数据中的一部分。在分片内部机制中,我们将详细介绍分片是如何工作的,而现在我们只需知道一

名词定义

分片

一个 分片 是一个底层的 工作单元 ,它仅保存了全部数据中的一部分。 在分片内部机制中,我们将详细介绍分片是如何工作的,而现在我们只需知道一个分片是一个 Lucene 的实例,以及它本身就是一个完整的搜索引擎。 我们的文档被存储和索引到分片内,但是应用程序是直接与索引而不是与分片进行交互。

Elasticsearch 是利用分片将数据分发到集群内各处的。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。 当你的集群规模扩大或者缩小时, Elasticsearch 会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里。

一个分片可以是 主 分片或者 副本 分片。 索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量。

副本分片

一个副本分片只是一个主分片的拷贝。副本分片作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务。

副本分片的主要目的就是为了故障转移,如果持有主分片的节点挂掉了,一个副本分片就会晋升为主分片的角色。在索引写入时,副本分片做着与主分片相同的工作。新文档首先被索引进主分片然后再同步到其它所有的副本分片。增加副本数并不会增加索引容量。

在索引建立的时候就已经确定了主分片数,但是副本分片数可以随时修改。

ES集群核心参数

  • ES集群的服务器个数,
  • ES集群的总CPU核心个数,
  • ES集群的总内存
  • 预估要存入ES总数据量(数据+索引)

通俗理解

  • 分片数(number_of_shards)就是主分片个数
  • 副本数(number_of_replicas) 可以理解成主分片的拷贝个数
  • 如果主分片数是5,则每个副本都有5个分片
  • 因此ES集群总的分片数 = 分片数 * (副本数 + 1)

副本数分配算法:

 副本数 <=  ES集群的服务器个数 - 1 

副本除了提升查询效率,主要目的为了容灾,数据冗余存储,保证数据安全,因此,副本数应跟据ES集群中的数据库数量(N-1)进行配置,如果ES集群中有3台服务器,则副本数设置为2,减 1 因为主分片本身也算一份。副本数设置为2,数据实际上有3份,分散到3台服务器中。

 预估要存入ES总数据量 * (副本数+1)  <= ES集群的总内存 / 2 

存入ES搜索引擎 的数据可以预估,比如预估存入的数据有 100G,则实际上会占用的内存为  100G * (副本数+1)  加 1 因为计入了主分片,数量里超限了也可以存入,只要磁盘够大,但是计算时就可能用到了磁盘,磁盘的IO性能会让整个ES集群性能大副下降。

ES集群的总内存只取了一半,因为考虚 ES 的 java. 程序本身占用的内存,数据聚合运算消耗的内存,如果实际项目中大量复杂运算,占用的内存需要更多。

分片数分配算法:

 分片数 * (副本数 + 1) <= ES集群的总CPU核心个数 

分片内的检索运算聚合需要 CPU, 为了充分发挥多核CPU的性能,且又避免CPU频繁调度,因此,ES集群内总的分片数应小于等于总的CPU核心个数。

以上是个人理解,因水平有限,难免有不妥之处,不可全信,欢迎交流切磋,欢迎指正。

本文原始网址:https://www.liu12.com/article...,转载请保留出处


推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • es的分布式原理?es是如何实现分布式的?
    Elasticsearch设计的理念是分布式搜索引擎,底层其实是基于lucene。核心思 ... [详细]
  • ES基本原理名词解释In-memorybuffer:ES内存缓冲区,新建的document写入的地方document:索引和搜索的 ... [详细]
  • Lucene 全文检索技术入门
    一、搜索引擎的历史萌芽:Archie、Gopher起步:Robot(网络机器人)的出现与spider(网络爬虫)发展:excite、galax ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • 一份来自清华的数据分析笔记,请查收!
    之前发过很多数据分析的文章,收到不少好评,但也有一些困惑:入门数据分析该学哪些知识点?该看哪些书?是从Pyth ... [详细]
  • 此版本重点升级了Online代码生成器,支持更多的控件生成,所见即所得,极大的提高开发效率;同时做了数据库兼容专项工作,让Online开发兼容更多数据库:Mysql、SqlServer、Oracle、Postgresql等!!!项目介绍 ... [详细]
  • 开发笔记:使用JavaScript解决网页图片拉伸问题
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了使用JavaScript解决网页图片拉伸问题相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 一:什么是solrSolr是apache下的一个开源项目,使用Java基于lucene开发的全文搜索服务器;Lucene是一个开放源代 ... [详细]
  • mysql+全文检索设计,基于sphinx+mysql全文检索架构设计.doc
    基于sphinxmysql全文检索架构设计.doc还剩2页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,喜欢就下载吧& ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了Nutch相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
王艳kiki
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有