elasticsearch,nest,C#,Connection Pooling,elasticsearch,Nest" /> elasticsearch,nest,C#,Connection Pooling,elasticsearch,Nest" />

C# 使用NEST ElasticSearch库的连接池

C# 使用NEST ElasticSearch库的连接池,c#,connection-pooling,elasticsearch,nest,C#,Connection Pooling,elasticsearch,Nest,我目前正在使用NEST ElasticSearch C#库与ElasticSearch交互。我的项目是一个MVC4WebAPI项目,它基本上构建了一个用于访问目录辅助信息的RESTfulWebService 我们才刚刚开始使用NEST,并且由于缺乏文档而一直步履蹒跚。有什么是有用的,但它有一些非常大的洞。目前,我们需要的一切都能正常工作,但是,我们遇到了一个问题,连接有时会占用整整一秒钟的时间。我们要做的是使用某种连接池,类似于您与SQL Server交互的方式 以下是有关如何使用nest进行连

我目前正在使用NEST ElasticSearch C#库与ElasticSearch交互。我的项目是一个MVC4WebAPI项目,它基本上构建了一个用于访问目录辅助信息的RESTfulWebService

我们才刚刚开始使用NEST,并且由于缺乏文档而一直步履蹒跚。有什么是有用的,但它有一些非常大的洞。目前,我们需要的一切都能正常工作,但是,我们遇到了一个问题,连接有时会占用整整一秒钟的时间。我们要做的是使用某种连接池,类似于您与SQL Server交互的方式

以下是有关如何使用nest进行连接的文档:

以下是我们项目中的相关代码片段:

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
使用
WebRequest。创建已汇集TCP连接的

审查实际执行情况:

重用
ElasticClient
不会带来任何性能提升,因为每个调用都已经获得了自己的
HttpWebRequest
。整个客户机是特意构建成无状态的

不过,我很感兴趣的是,为什么打电话给你需要1秒的时间。你可以发布实际的嵌套代码,你是如何测量调用的,并描述你的数据吗


免责声明:我是NEST的作者。

是的,那太好了。我想在通话中获得一些可复制的数据,也就是说,它花费了X amount的时间,但如果我使用fiddler之类的东西启动它,它需要Y amount的时间。试着在运行代码时同时启动fiddler,以便轻松地重放代码。(搜索可能缓存在elasticsearch一侧,因此要小心误报)我被我们的Elastic专家错误地告知NEST使用了二进制协议,因此我希望共享连接。现在使用TryConnect更有意义(只需检查以确保设置正确),但文档中并没有完全清楚这一点。至于为什么要花一秒钟,这似乎(不知何故)与网络有关。同一数据中心中的机器永远不会出现问题。我用秒表测量,似乎所有的时间都在通话中。我对弹性盒(在出现问题的机器上)的平均ping时间是350ms。很抱歉,评论系统有问题。在我写完之前,我无意中发布了。我很高兴听到这是你们集群中的一台机器出了问题。谢谢你更新这个问题!对于将来浏览这篇文章的谷歌人来说总是很好的。如果您有任何问题/疑问/请求,请保持联系。最好的方式是将问题发布到github。