4

私は現在、ElasticSearch とやり取りするために NEST ElasticSearch C# ライブラリを使用しています。私のプロジェクトは、ディレクトリアシスタント情報にアクセスするための RESTful Web サービスを基本的に構築する MVC 4 WebAPI プロジェクトです。

私たちは NEST を使い始めたばかりで、ドキュメントの不足につまずいています。そこにあるものは便利ですが、非常に大きな穴がいくつかあります。現在、必要なものはすべて機能していますが、接続に最大 1 秒かかる場合があるという問題が発生しています。私たちがやりたいことは、SQL Server と対話する方法と同様に、ある種の接続プールを使用することです。

ネストを使用して接続する方法に関するドキュメントは次のとおりです。 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 で長い時間がかかりました。

4

1 に答える 1

20

TryConnect()Elasticsearch を呼び出すたびに呼び出す必要はありません。これは基本的に、アプリケーションの起動時のサニティ チェック呼び出しです。

NEST は、Elasticsearch 用の C# REST クライアントであり、デフォルトでIConnectionWebRequest.CreateTCP 接続を既にプールしています。

実際の実装を確認してください: https://github.com/elastic/elasticsearch-net/blob/master/src/Elasticsearch.Net/Connection/HttpConnection.cs

各呼び出しはすでに独自の を取得しているため、再利用ElasticClientしてもパフォーマンスは向上しません HttpWebRequest。クライアント全体が意図的にステートレスに構築されています。

ただし、通話に1秒かかる理由に非常に興味があります。実際の NEST コード、通話の測定方法、データの説明を投稿していただけますか。

免責事項: 私は NEST の作成者です。

于 2012-07-04T20:39:26.153 に答える