gpt4 book ai didi

c# - NEST ElasticSearch 库的连接池

转载 作者:太空狗 更新时间:2023-10-29 23:58:17 25 4
gpt4 key购买 nike

我目前正在使用 NEST ElasticSearch C# 库与 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 以及特定的网络设置有关。使用与 Elastic box 处于同一网络的机器时,问题完全消失;我的开发机器(到 Elastic box 的平均 350ms)似乎有时无法建立 http 连接,这导致 TryConnect 的时间很长。

最佳答案

您不必每次调用 Elasticsearch 时都调用 TryConnect()。它基本上是应用程序启动时的健全性检查调用。

NEST 是 Elasticsearch 的 C# REST 客户端,默认的 IConnection 使用 WebRequest.Create,它已经汇集了 TCP 连接。

查看实际执行情况:https://github.com/elastic/elasticsearch-net/blob/master/src/Elasticsearch.Net/Connection/HttpConnection.cs

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

不过,我很想知道为什么通话对您来说需要 1 秒。您能否发布实际的 NEST 代码、您如何测量调用并描述您的数据。

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

关于c# - NEST ElasticSearch 库的连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11334717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com