solrj的CloudSolrClient源码分析及为什么查询慢
solrj的CloudSolrClient源码分析及为什么查询慢
将将将 发表于2年前
solrj的CloudSolrClient源码分析及为什么查询慢
  • 发表于 2年前
  • 阅读 461
  • 收藏 0
  • 点赞 2
  • 评论 2

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: solrj的CloudSolrClient源码分析及为什么查询慢

solrj针对solrcloud提供了CloudSolrClient,用于对集群环境solr操作,从一个测试例子,一步步深入,看看CloudSolrClient是如何做查询操作的

1、使用CloudSolrClient发起一个查询请求

2、接着调用CloudSolrClient的request方法

 

 

3、CloudSolrClient的request方法中,首先回去获取请求中的collection名字,如果没有,获取默认设置的collcetion,然后调用requestWithRetryOnStaleState方法

4、requestWithRetryOnStaleState方法中,先去连接zk获取solrclound注册在zk上的信息

5、获取zk上的信息,经过处理后,封装到request中,调用sendRequest方法

6、在sendRequest中,会获取每个片的每个replicat的url与注册在zk上的live url做一个交集,得到一个查询url集合,然后创建一个LBHttpSolrClient,请求solrcloud

 

 

7、LBHttpSolrClient的request中会在for循环中挨个的轮询上一个步骤中放入的urllist发起http查询请求

 

在rsp合并结果,并返回

 

问题

在LBHttpSolrClient的request中,http请求是串行化的,也就说,一次查询,需要串行的发起n个http请求,太耗费时间

建议


LBHttpSolrClient的request中对多个url发起请求,可以考虑并行化的http请求

在CloudSolrClient中保持对zk的长连接watch不断

也可以从业务入手,采取手动路由的方式,即”知道自己要的数据在那个分片上“,直接对该分片发起http查询请求,这样会减少http请求个数

共有 人打赏支持
粉丝 21
博文 17
码字总数 12880
评论 (2)
ITFrank
你的意思是在建collection时指定router.name=implicit ?这样就能把想要的索引分配到自己相应的shard中去?
Volong
那个循环不是用来保证请求一定成功的吗?如果在发送请求的时候报了异常,才会进行下一次循环的吧。
×
将将将
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: