我目前使用NEST ElasticSearch C#库与ElasticSearch进行交互。我的项目是一个MVC 4 WebAPI项目,它基本上构建了一个用于访问目录服务信息的RESTful Web服务。连接池与NEST ElasticSearch库
我们刚刚开始使用NEST,并一直在缺乏文档。什么是有用的,但它有一些非常大的漏洞。目前,我们需要的所有东西都可以工作,但是,我们遇到了连接问题,有时甚至需要一整秒。我们想要做的是使用某种连接池,类似于你如何与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以及特定的网络设置有关。在与Elastic盒子相同的网络上使用机器时,问题完全消失;我的开发机器(平均350毫秒到Elastic盒子)似乎无法建立http连接,这在TryConnect中造成了很长时间。
是的,那太棒了。我希望得到一些可重复的数据和一些数据,也就是说它花费了大量的时间,但如果我使用类似提琴手的方式来启动它,它需要花费大量的时间。当您运行代码时,尝试一边启动提琴手,一边轻松地重播它。 (搜索可能会缓存在elasticsearch的一边,所以要小心误报) –
我被我们的Elastic guru误认为NEST使用了二进制协议,因此我希望将连接集中起来。 TryConnect的使用现在变得更有意义(只需检查以确保您的设置是正确的),但文档并不完全清楚这一点。 至于为什么它需要一秒钟,似乎(不知何故)与网络有关。同一个数据中心内的机器永远不会有问题。我使用秒表进行测量,并且所有时间似乎都在TryConnect调用中。我的Elastic盒子(在展示问题的机器上)的平均ping时间是350ms。 –
对不起,评论系统有问题。在我完成之前意外发布。 –