elasticsearch集群数据读写与分片设置

概念

  • 索引

ES将它的数据存储在一个或者多个索引中。用sql领域的术语来类比,索引就像数据库,可以向索引写入文档或者从索引中读取文档,并通过ES内部使用的Lucene将数据写入索引或从索引中检索数据。索引是具有某些类似特征的文档集合,索引由名称标识(必须全部小写)。

  • 分片

ES会把查询文档集合分解为多个小的索引,每一个小的索引就叫做分片。每个分片都是一个独立的’索引’。 数据量非常大TB级别,数据分配到不同的分片,每个分片只包含一部分数据,只需要检索包含该数据的分片即可,提高了数据吞吐量。分片数在创建索引时指定,不可修改

  • 副本

是对分片的复制。目的是为了当分片/节点发生故障时,副本分片成为住分派你,提供高可用性,它允许您扩展搜索量/吞吐量,因为可以在所有副本上并行执行搜索。创建索引时可以指定副本数,也可以不设置,副本可以修改的

数据写入

在这里插入图片描述

  • 1:客户端通过连接配置,动态连接到集群,其中一个节点提供服务,成为协调节点
  • 2:根据写入数据的_id的hash值与分片数量计算存储到那个分片上,假如在节点3上,协调节点将数据先写入节点3的主分片P3上

    shard = hash(_routing) % (num_of_primary_shards)

  • 3: 主分片P3写入成功后,会将数据同步到节点3的副本分片R3上
  • 4:副本分片R3完成数据同步后,会把写入成功后响应返回给协调节点
  • 5:协调节点将响应返回给客户端,写入完成

读取数据

  • 客户端读请求会先选择一个协调节点
  • 由协调节点根据数据的请求hash得知是放在哪个分片上的
  • 由于数据在主从分片上都有,并且数据一模一样,读取操作在主从上是采用轮询的方式
  • 因此副本分片多了后会提升分片的负载能力
  • 数据查询完毕后返回给协调节点,协调节点返回客户端

分片如何设置

  • 分配分片时主要要考虑的问题
  1. 数据集的增长趋势
  2. 分配的每个分片都是由额外的成本的,过大也不太好。
  3. 每个分片其实都是要存数据的,并且都是一个lucene的索引,会消耗文件句柄已经CPU和内存资源
  4. 当你进行数据访问时,我们的index就会去到所有的分片上去取数据
  5. 如果要取100条,如果你有100个分片,就会从100个分片上各取出100个数据然后进行排序给出最终的排序结果,取了100*100条数据
  • 主分片数据到底多少为宜呢?
    根据你的节点数来进行分片,3个Node,N*(1.5-3)

总结

查询与搜索都会涉及到分片,主分片一旦设置不允许修改,分片过多或者过少都会影响到系统吞吐量, ES会查询所有分片然后进行数据合并排序。因此分片设置一定要尽量合理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值