SolrCloud合并流程

  1. solr云环境相对于solr单机来说,从流程上来说没有什么大的区别,流程都如下图所示

 

solr云的请求流程如下

具体流程如下

  1. http请求至SolrDispatchFilter类,执行doFilter方法,解析请求参数
  2. solrCore处理请求
  3. 由请求参数中的select方法来定位到SearchHandler类,主要完成下面几件事
  •  预处理组件
  • 判断是否是分布式处理
  • 分布式计算的流程
  • 通过状态判断下一步该如何处理,其中以QueryComponent为例
  • prepare预处理
  • 通过distributedProcess方法来判断当前的状态,包括查询预处理,执行查询,获取查询结果,查询结束等状态,并且封装请求保存在rb.outgoing中
  • 通过rb.outgoing中的请求,像所有的分片发送请求数据,以达到分布式请求 (PS,默认情况下是想zookeeper中的分片的状态来发送请求,但是如果做好了分片,而不是用的默认的路由规则的话,这块是可以控制的,详细的部分在后面的分片研究那块会详细的阐述)
  •  shardHandler1.submit(sreq, shard, params);来实现请求的异步实现,具体的实现就是上面的图片所描述的单机版的请求数据
  • handleResponses方法则是将请求的数据进行统一的处理,包括合并
  • 对于QueryComponent组件,solr的实现机制分两步
  • 1、向各个分片发送请求数据,返回的仅仅是id,而不是完整的document
  • 2、在对id进行merge之后,再向各个分片发送请求数据,请求参数为具体的id,从而返回具体的documen
  • url测试DEBUG数据如下
  • 第一次请求URL
  • {distrib=false&wt=javabin&version=2&rows=10&df=text&fl=id,score&shard.url=http://192.168.74.28:6080/solr/collection1/&NOW=1406796966498&start=0&q=*:*&_=1406796959238&isShard=true&fsv=true}
  • 第二次请求URL
  • {NOW=1406796966498&shard.url=http://192.168.74.28:6080/solr/collection1/&df=text&ids=MK2387151639554990,MK7739703286335635,MK2113017340876208,MK9848660015477862,MK9571458771402159,MK0840088396921094,MK2818128435777676,MK7543970969920737,MK8509213943201612,MK2501104826406886&q=*:*&distrib=false&_=1406796959238&wt=javabin&isShard=true&version=2&rows=10}

由上面总结可以看出,AUS如果需要实现自定义的组件来满足分布式请求的话,需要做好继承并实现下面几个方法

1、prepare

 组件预处理,主要需要处理的事包括:具体的参数的设定,请求参数的二次处理

2、process

单机版中具体的组件的处理类,返回处理结果至rb中,该方法是实现的重点

3、distributedProcess

分布式处理,基本上维护状态,目前可以不实现该方法

4、handleResponses

分布式处理,可以实现处理结果的合并,主要通过该方法实现solr云请求

5、finishStage

分布式处理,主要是改变处理的状态值,目前可以不实现该方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值