Elasticsearch 中的索引的分区(Shards)和副本(Replicas)的使用 ...

打印 上一主题 下一主题

主题 1908|帖子 1908|积分 5724

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Elasticsearch是一个高性能的、分布式的搜索与数据分析引擎,广泛用于全文搜索、布局化搜索、分析以及这三者的组合场景。在Elasticsearch中,“索引”(Index)是其最根本的数据管理单位,可以类比为传统关系数据库中的“数据库”。为了确保数据的高可用性与高性能访问,Elasticsearch采用了分片(Shards)和副本(Replicas)的概念。
1、分片(Shards)

分片是Elasticsearch举行数据分布和扩展的基础。每个索引都可以被分割成多个分片,每个分片实在是一个独立的索引。分片使得Elasticsearch可以把巨大的数据集分散存储在多个节点上,这样就可以:
程度扩展:随着数据量的增加,可以通过增加更多的节点来分摊数据和负载,从而进步处理本领。
提升性能:搜索操纵可以并行在多个分片上实行,由于数据量减少,每个分片处理的速度更快,团体搜索性能得以提升。
2、副本(Replicas)

副本是分片的复制,主要用于进步数据的可用性和搜索查询的并发处理本领。每个分片都可以有一个或多个副本,这些副天职布在不同的节点上,从而提供了:
数据可用性:当某个节点发生故障时,该节点上的分片假如有副本存在于其他节点上,那么这些副本可以包管数据不会丢失,而且服务还可以继承运行。
负载均衡:读取操纵(如搜索哀求)可以在所有副本之间举行负载均衡,这样可以进步查询的吞吐量和响应速度。

3、具体如何定义分片和副本数目

创建索引时指定分片和副本数
当您通过Elasticsearch的REST API创建一个新的索引时,可以在哀求体中使用settings部分来指定该索引的分片数(number_of_shards)和副本数(number_of_replicas)。以下是一个具体的示例:
  1. PUT /my_index
  2. {
  3.   "settings": {
  4.     "index": {
  5.       "number_of_shards": 3,    # 指定该索引将有3个主分片
  6.       "number_of_replicas": 2   # 每个主分片将有2个副本分片
  7.     }
  8.   }
  9. }
复制代码
这个例子中,PUT /my_index是创建名为my_index的索引的哀求。在哀求体中,settings部分指出这个索引将被分成3个主分片,而且每个主分片将会有2个副天职片。这意味着,统共会有9个分片(3个主分片 + 6个副天职片)被分布在集群中。
注意事项
主分片数目:一旦索引被创建,其主分片的数目就无法更改。因此,在创建索引时应该谨慎选择合适的分片数目。
副本数目:与主分片数目不同,副本的数目是可以动态调整的。假如您发现需要更多的数据冗余或查询吞吐量,可以增加副本的数目。
伸缩性与性能:选择分片和副本的数目时需要考虑数据量、查询负载和集群的硬件资源。过多的分片可能会增加集群的管理开销,而过少的分片可能会限制数据和查询的伸缩性。
4、动态调整副本数

假设在某个时候,您想要改变已有索引的副本数以进步数据的冗余度或查询的处理本领,您可以使用以下API调整副本数:
  1. PUT /my_index/_settings
  2. {
  3.   "index": {
  4.     "number_of_replicas": 3
  5.   }
  6. }
复制代码
这个命令将my_index索引的副本数改为3。这意味着每个主分片现在将有3个副天职片,从而进步了数据的可用性和读取操纵的并行度。
5、分片数的确定

数据量预估:估计索引的总数据量巨细。一般来说,每个分片处理20GB到50GB数据是比较理想的。这不是固定规则,但可以作为一个起点。
硬件资源:考虑你的硬件资源,尤其是内存和CPU。分片越多,斲丧的资源也越多。确保你的Elasticsearch集群有足够的资源来处理这些分片。
写入吞吐量:假如你的应用会有大量的写入操纵,更多的分片可能有助于进步写入性能,因为可以并行写入多个分片。
查询性能:更多的分片意味着查询可以并行于更多的分片上实行,这可能会进步查询性能。但是,假如每个查询都要访问大多数分片,那么管理过多的分片会减慢查询速度。
6、副本数的确定

数据可用性:至少有一个副本可以确保当某个节点失败时,数据不会丢失,而且Elasticsearch服务仍然可用。
读取性能:更多的副本意味着更高的读取吞吐量,因为读取哀求可以在多个副本之间分配。假如你的应用主要是读取密集型的,增加副本数可以进步查询性能。
集群负载:考虑集群的团体负载。增加副本会进步数据冗余和读取性能,但也会增加存储需求和网络流量,因此需要确保你的硬件资源可以支持。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

花瓣小跑

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表