我们利用google-api-php-client库将大量服务器端数据流式传输到BigQuery中。流媒体的效果很好,除了表现。BigQuery利用PHP流式传输'insertAll'性能
我们的负载测试为我们提供了1000ms(1秒)的平均时间,将一行数据流传输到BigQuery中。我们不能让客户等待超过200毫秒。我们已经测试了更小的有效载荷,时间保持不变。客户端的异步调用不是我们的选择。
的代码的“瓶颈”行是:
$service->tabledata->insertAll(PROJECT_NUMBER, DATA_SET, TABLE, $request);
具有库的机罩调用插入该行看了下被简单地卷曲请求(Curl.php in the library)。
有没有什么办法可以修改insertAll()使其更快?我们并不关心结果,所以一场即燃即用的会为我们工作。我们已经尝试在底层cCURL请求中设置CURLOPT_CONNECTTIMEOUT_MS和CURLOPT_TIMEOUT_MS,但它不起作用。
查看pfsocket打开。它应该通过简单地重复使用以前使用的套接字来提供适度的性能增益。我怀疑谷歌提供这个在lib中,所以你不得不自己滚动和手动处理所有的标题。 – r3wt
是的,我应该在帖子中提到我们确实研究过“fsockopen”并且它确实有效(<100ms) - 直到我们由于大量请求(〜5K p/s)而开始用尽套接字时, 。虽然没有调查pfsocket .. –
你有没有尝试所有必要的性能调整为你的操作系统?文件句柄,连接等 – r3wt