solrj的CloudSolrClient源碼分析及爲何查詢慢

solrj針對solrcloud提供了CloudSolrClient,用於對集羣環境solr操做,從一個測試例子,一步步深刻,看看CloudSolrClient是如何作查詢操做的測試

一、使用CloudSolrClient發起一個查詢請求url

二、接着調用CloudSolrClient的request方法spa

 

 

三、CloudSolrClient的request方法中,首先回去獲取請求中的collection名字,若是沒有,獲取默認設置的collcetion,而後調用requestWithRetryOnStaleState方法路由

四、requestWithRetryOnStaleState方法中,先去鏈接zk獲取solrclound註冊在zk上的信息it

五、獲取zk上的信息,通過處理後,封裝到request中,調用sendRequest方法io

六、在sendRequest中,會獲取每一個片的每一個replicat的url與註冊在zk上的live url作一個交集,獲得一個查詢url集合,而後建立一個LBHttpSolrClient,請求solrcloudfor循環

 

 

七、LBHttpSolrClient的request中會在for循環中挨個的輪詢上一個步驟中放入的urllist發起http查詢請求集羣

 

在rsp合併結果,並返回循環

 

問題request

在LBHttpSolrClient的request中,http請求是串行化的,也就說,一次查詢,須要串行的發起n個http請求,太耗費時間

建議


LBHttpSolrClient的request中對多個url發起請求,能夠考慮並行化的http請求

在CloudSolrClient中保持對zk的長鏈接watch不斷

也能夠從業務入手,採起手動路由的方式,即」知道本身要的數據在那個分片上「,直接對該分片發起http查詢請求,這樣會減小http請求個數

相關文章
相關標籤/搜索