elasticsearch(3) 路由规则与写一致性原理和qu'orum 。deep paging 问题

1.一个index会被分成多个分片, 所以一个document只能放在一个shard中,当document创建的时候决定把这个document放在哪个shard上,这个就是路由   

路由算法  shard = hash(routing) % number of  primary_shard 

举个例子:一个index有3个primary shard

一个请求会带过来一个 routing,默认是id

手动指定routing是很有用的,可以保证某个document落在某个shard上

根据这个路由公式可以得出primary shard是不可变的

 

2.增删改操作,

如果有个请求随机到了一个shard上,这个shard就变成coordernate node,此时这个coordernate node会根据路由规则转发给我相应的primary shard,相应的pramry shard节点更新之后会同步replication shard,最后coordernate node 会把结果反馈给client

以上的路由规则有点类似redis cluster的规则

 

3.关键词quorum

put /index/type/id?consistency= ()

()有三种情况{1.one:只要有一个prmary shard 活跃,就可以执行 2.all:必须所有的primary shard和replica shard 都活跃才可以 3. quorum:默认,要求(pramry+number_of_replication)/2+1个shard活跃才可以使用}

如果节点少于quorum的数量,可能导致quorum不齐全,导致不能执行任何写操作

quorum不齐全时,wait,默认1分钟

put /index/type/id?timeout=30 # 默认毫秒

put /index/type/id?timeout=30s # 指定单位为30秒

是不是有点类似kafka的partition写入的ack参数?

4.读请求

当客户端有个读请求分到coordinate node上时,转发不一定要到primary shard上,会根据round-robin决定到primary shard上还是replication shard上

5.deep paging

deep paging指的事搜索特别深,比如有60000条数据,现在每个shard上有20000条数据,如果现在要全局搜索10001-10010之间的10条数据,如果一个请求到了一个coordinate node上,请求会被转发到三个shard上,三个shard都会返回10010条数据,那么coordinate node上游30030条数据,然后还要进行排序,这样很消耗cpu和网络带宽

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值