6.4 ElasticSearch分布式特性之文档存储

1.简介
(1).问题
文档最终会存储在分片上,假如一个文档最终存储在分片P1上,那么该文档是如何存储到分片P1上的?选择P1的依据是什么?

(2).解决方案
需要文档到分片的映射算法,目的是使得文档均匀分布在所有分片上,以充分利用资源。算法既不是随机选择算法,也不是轮询(round-robin)算法,原因是这两者算法需要维护文档到分片的映射关系,成本巨大。实际上elasticsearch选择的是根据文档值实时计算对应的分片来完成文档存储的,具体的映射算法如下。

shard = hash(routing)%number_of_primary_shards
  • shard:文档需要进入的分片
  • hash:hash算法保证文档数据可以均匀地分散在分片中
  • routing:一个关键参数,默认是文档的id,可以自行制定
  • number_of_primary_shards:主分片数

文档到分片的映射算法可以看出分片数在索引结构确定后就不可以更改的原因

2.文档创建流程
在这里插入图片描述

  • client向node3发起创建文档的请求
  • node3通过routing计算该文档应该存储在P1上,查询cluster state后确认主分片P1在node2上,然后转发创建文档的请求到node2
  • P1接收并执行创建文档请求后,将同样的请求发送到副本分片R1
  • R1接收并执行创建文档请求后,通知P1成功创建的结果
  • P1接收副本分片创建成功的结果后,通知node3创建成功
  • node3返回结果到client

3.文档读取流程
在这里插入图片描述

  • client向node3发起获取文档1的请求
  • node3通过routing计算该文档应该存储在P1上,查询cluster state后获取P1的主副分片列表,然后以轮询的机制获取一个分片,比如这里是R1,然后转发读取文档的请求到node1
  • R1接收并执行读取文档请求后,将结果返回给node3
  • node3返回结果到client

4.文档批量创建流程
在这里插入图片描述

  • client向node3发起批量创建文档的请求
  • node3通过routing计算所有文档对应的分片,然后按照主分片分配对应执行的操作,同时发送请求到涉及的主分片,比如这里的3个主分片都需要参与
  • 主分片接收并执行请求后,将同样的请求同步到副本分片
  • 副本分片执行结果后返回结果到主分片,主分片再返回到node3
  • node3整合结果返回到client

5.文档批量读取流程
在这里插入图片描述

  • client向node3发起批量获取文档的请求(mget)
  • node3通过routing计算所有文档对应的分片,然后以轮询的机制获取需要参与的分片,按照分片构建mget请求,同时发送请求到涉及的分片
  • 涉及的分片执行查询请求并返回结果
  • node3返回结果到client
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值