2014-06-13 56 views
6

當我設置使用ElasticSearch.NET我ElasticSearch羣集的連接,我使用的代碼塊如下所示:ElasticSearch.NET連接/客戶端管理生命週期

var uris = settingsProvider.ElasticSearchUri.Split(';').Select(x => new Uri(x)); 
var sniffingConnectionPool = new SniffingConnectionPool(uris); 
var connectionConfiguration = 
    new ConnectionConfiguration(sniffingConnectionPool) 
     .SniffOnConnectionFault() 
     .SniffOnStartup(); 
var client = new ElasticsearchClient(settings: connectionConfiguration); 

是不是建議我memoize的/使靜態/爲ElasticsearchClient,ConnectionConfigurationSniffingConnectionPool做一個單例包裝,這樣每次搜索時都不需要重構它們?

回答

0

我還沒有看到文檔中的任何內容來提供其他建議,但通常我會在謹慎的方面犯錯,並避免單例,因爲文檔也沒有提供有關線程安全的承諾。一定要處置任何東西IDisposable,如果您擔心性能或內存使用情況,請使用分析器來確定您的工作目標。

0

我們注意到,在5節點羣集中搜索時,使用嗅探需要800毫秒和1.2秒之間的時間。我們認爲我們會做單身,這樣我們只能嗅一次。並設置.SniffOnConnectionFault(真),那麼如果它嗅探的節點消失,它會選擇另一個,如果我正確理解。

有沒有人使用過這種模式,有沒有更好的方法,因爲嗅探是如此之慢?

+0

是它僅在第一次請求800毫秒或者是它不斷地800毫秒,通過了多個請求?我讀過的帖子提到客戶需要爲第一個請求進行熱身,這需要花費更多的時間。 – TchiYuan