PHP中的ElasticSearch \ Client使用MultiCurl

时间:2014-03-24 17:36:58

标签: php curl elasticsearch

在对使用ElasticSearch PHP客户端的产品进行概要分析时,我注意到它本身在执行请求时使用Guzzle的CurlMulti适配器。

这似乎会导致很多开销,并且比较此客户端和我自己的cURL下载器之间的时间显示ES \ Client几乎慢了10倍。看起来它纯粹与使用multi。

有关

如何更新适配器以使用内联卷曲请求?

我似乎无法在文档中找到允许我更改此内容的部分。

1 个答案:

答案 0 :(得分:2)

对不起,目前还没有充分记录。您的基准测试准确无误 - Guzzle的使用带来了相当大的开销。开销实际上是由于各种Guzzle类的自动加载成本。您可以使用CurlMultiConnection类替换Guzzle Connection,这是一个轻量级的替代品。

您可以使用以下方式启用它:

$params['connectionClass'] = '\Elasticsearch\Connections\CurlMultiConnection';
$client = new Client($params);

使用此语法,您还可以编写自己的替换Connection类。它只需要遵循ConnectionInterface接口。

Based on my benchmarks(在这一点上确实相当老):

<强>狂饮

  • 无网络:7.095毫秒

  • 网络Ping:15.856 ms

<强> CurlMultiConnection

  • 无网络:4.345毫秒

  • 网络Ping:7.122 ms

基于分析,速度的差异几乎完全是自动加载。加载后,两个Connection类都以相同的吞吐量执行网络操作。与APC或HHVM一起使用时,两个Connection类的执行速度都会显着提高。