elasticsearch-分布式增删改查原理

学习思路:

  1. 分片算法
  2. 分布式CRUD原理

一、分片算法

主分片数量是在索引创建的时候确定(7.0版本前默认5个)并且后期不可修改 ,复制分片可以随时更改,为什么主分片数量确定后就不可修改,这要从它的分片算法说起:分片算法跟数据库分片算法的概念一样,首先需要一个分片字段(默认_id)然后按照一定的算法将数据分配得到指定的分片,分片算法如下

分片=hash(分片字段value)%主分片数量

是根据主分片数量进行取模得到对应的分片,如果主分片数量改变,那么之前的数据再按照这个算法就不成立,必须重新清洗数据,重新分配

二、分布式CRUD原理

我们先创建索引指定2个主分片,每个主分片2个复制分片,启动3个节点,如图

æä¸ä¸ªèç¹ä¸ä¸ªç´¢å¼çé群

暂定node1为master节点,node2,node3为数据节点,都可以存储数据,每个节点都能接收请求、知道数据对应的节点、转发请求到对应的节点;简单说:我们访问过程中能随意访问任意一个node;集群对客户端无差异(比如我们选择轮循的负载均衡算法)

1、数据的新增、删除

这三种操作都是写操作,必须由主分片发起,然后同步到其它复制分片

æ°å»ºãç´¢å¼æå é¤åä¸ææ¡£

解释:

  1. 发起写请求到node1,经过分片算法将数据分配到P0分片,而P0分片在node3
  2. 请求路由到node3,node3-P0(主分片)处理完毕后
  3. 数据同步到其它两个复制分片(node1/node2(R0))
  4. 同步完成后返回node1成功,node1返回客户端成功

在第三步主分片同步复制分片时:默认是同步的,如果设置如果设置为异步,可能出现同步失败,但返回客户端成功的情况

2、查询

查询操作可以从任何节点、任何分片发起,然后根据一定的负载均衡算法(如轮循算法)选择真正哪个节点、哪个分片处理

解释:

  1. 假如客户端发起请求到node1节点,经过算法发现数据存在0分片,而0分片在三个节点都有
  2. 经过算法将请求路由到node2:R0检索数据(每次路由到的节点可能都不一样)
  3. R0检索到数据后返回node1节点,node1返回客户端

3、修改

修改操作是先读后写

å±é¨æ´æ°ææ¡£

解释:

  1. 客户端请求node1进行修改数据操作,先根据算法发现数据所在的主分片(P0):后面要写操作,所以这里找的是主分片
  2. 将请求路由到node3:P0
  3. 查询出数据,然后在主分片进行修改,修改完毕后重新索引(如果出现并发修改,默认重试3次:retry_on_conflict=3)
  4. 主分片修改成功后同步修改复制分片
  5. 都修改成功后返回node1,node1返回客户端

总结:

  1. 增删改,这类写操作必须先找到对应的主分片,主分片操作完后再同步复制分片
  2. 查(读操作)是可以在任何分片进行
  3. 批量操作就是将批量查分成单个进行上述操作,然后将结果归并,返回客户端

 

公众号主要记录各种源码、面试题、微服务技术栈,帮忙关注一波,非常感谢

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值