Elasticsearch---document存放时的路由原理及增删改查原理

路由

每次创建一个document的时候,这个document会放到那个shard哩?

路由算法: shard=hash(routing)%number_of_primary_shards
解释:每次增删改查一个document的时候,都会带过来一个routing number,这个值默认就是_id,即 routing=_id
算出这个routing的hansh值,然后和primary shard的总数求余,算出的值,就是这个document的存放的位置(存放至某个primay shard)。

这个routing的值,默认是_id,但我们也可以手动指定
例如发送求的时候

PUT /index/type/id?routing=user_id

primay shard数量不可变的原因就是因为这个路由算法
hash(routing)%number_of_primary_shards 一般是不等于 hash(routing)%(number_of_primary_shards+n)

增删改

增删改的请求只能由primary shard处理的

增加一个document举例

  1. 客户端会选择一个node(节点)发送请求,这个node就是coordinate node(协调节点)
  2. coordinate node,对document进行路由(假设计算出的prmary shard 在第n个node),将请求转发到对应的node的primary shard上处理(假设为node A)
  3. node A 上的primary shard 处理这个请求,然后再将数据同步到replica shard
  4. coordinae node,如果发现primary node 和所有replica node都搞定之后,就返回响应结果给客户端
新增的过程,删除和修改类似

查询

  1. 客户端发送请求到任意一个node,这个node就是coordinatenode
  2. coordinate node对document进行路由,将请求转发到对应的node,此时会使用round-robin随机轮询算法,在paimary shard以及所有replica中随机选择一个,让读请求负载均衡
  3. 接收到请求的node返回document给coordinate node
  4. coordinate node返回document给客户端

特殊情况:document如果还在建立索引的过程中,可能只有primary shard有此document,任何一个replica都没有,此时会导致无法读取document(返回未找到),但是document完成索引后,primary shard和replica就都有了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Neil Zhu,简书ID Not_GOD,University AI 创始人 & Chief Scientist...
    朱小虎XiaohuZhu阅读 6,060评论 0 5
  • 欢迎访问我的博客查看原文:http://wangnan.tech 注:文本整理自《ELKstack权威指南》 架构...
    GhostStories阅读 20,150评论 0 31
  • 端午节遐思 今年的节日里,我开始读屈原,他的高洁的品格,他的爱国情深。看到国将不存,自己不愿屈服,宁愿投河自尽,以...
    鸣鸥阅读 2,481评论 5 4
  • 九月十六日,我带着积蓄已久的憧憬与迷茫进入这所大学。憧憬可能减量,但迷茫似乎更多。也许每个大学新生都是如此。 我在...
    木猫阅读 2,490评论 10 1
  • 20170906,20:46 M研究生,阳光森林 第四课 慢性疾病研究生(4) 需要反复听15遍以上!!! 林海峰...
    卡蜜尔阅读 3,878评论 0 2

友情链接更多精彩内容