簡體   English   中英

與NEST ElasticSearch庫的連接池

[英]Connection Pooling with NEST ElasticSearch Library

我目前正在使用NEST ElasticSearch C#Library與ElasticSearch進行交互。 我的項目是一個MVC 4 WebAPI項目,它基本上構建了一個RESTful Web服務來訪問目錄服務信息。

我們剛剛開始與NEST合作,並且一直在為缺乏文檔而磕磕絆絆。 什么是有用的,但它有一些非常大的漏洞。 目前,我們需要的一切工作,但是,我們遇到的問題是連接有時需要一整秒。 我們想要做的是使用某種連接池,類似於您與SQL Server交互的方式。

以下是有關如何使用nest連接的文檔: http//mpdreamz.github.com/NEST/concepts/connecting.html

以下是我們項目的相關代碼段:

public class EOCategoryProvider : IProvider
{
    public DNList ExecuteQuery(Query query)
    {
        //Configure the elastic client and it's settings
        ConnectionSettings elasticSettings = new ConnectionSettings(Config.server, Config.port).SetDefaultIndex(Config.index);
        ElasticClient client = new ElasticClient(elasticSettings);

        //Connect to Elastic
        ConnectionStatus connectionStatus;
        if (client.TryConnect(out connectionStatus))
        {
            // Elastic Search Code here ...
        } // end if
    } // end ExecuteQuery
} // end EOCategoryProvider

從查看文檔,我看不到連接池的任何規定。 我一直在考慮實現我自己的(有3個或4個ElasticClient對象存儲,並選擇它們循環風格),但我想知道是否有人有更好的解決方案。 如果沒有,有沒有人有關於手動實現連接池的最佳方法的建議? 有什么文章指向?

感謝你們提出的任何事情。

更新 :這似乎與在每個請求和特定網絡設置上調用TryConnect有關。 當在與彈性盒子相同的網絡上使用機器時,問題完全消失了; 我的開發機器(平均350毫秒到彈性盒子)似乎有時無法建立http連接,這導致了TryConnect的長時間。

每次調用Elasticsearch時都不必調用TryConnect() 它基本上是一個完整的應用程序啟動時的健全檢查調用。

NEST是Elasticsearch的C#REST客戶端,默認IConnection使用已經匯集TCP連接的WebRequest.Create

查看實際實現: https//github.com/elastic/elasticsearch-net/blob/master/src/Elasticsearch.Net/Connection/HttpConnection.cs

重復使用ElasticClient不會提供任何性能提升,因為每個調用已經獲得了自己的HttpWebRequest 整個客戶都是故意無國籍的。

然而,我對你為什么打電話需要1秒鍾非常感興趣。 您是否可以發布實際的NEST代碼,如何測量呼叫並描述您的數據。

免責聲明:我是NEST的作者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM