CouchDB质量更新(卷曲PUT消息)

时间:2015-10-26 19:48:43

标签: php curl couchdb

我正在尝试使用PHP的Curl界面更新大量沙发记录(数百万的订单),并在处理30,000ish记录后遇到Curl错误。扔掉了:

"Failed to connect to 127.0.0.1: Cannot assign requested address"

StackOverflow和互联网上的其他答案表明这是系统资源耗尽的结果,即端口。定期检查在TIME_WAIT(netstat -an | grep TIME_WAIT | wc -l)中停留的端口数量,这似乎就是这种情况。

查看我的代码,我为每个更新PUT消息调用“curl_init()”和“curl_close()”,所以这是有意义的,如果我试图抓住数百万个视图,我可以设置一次curl资源,运行我的视图,然后关闭它。

但是,由于CouchDB记录更新将docID作为URL字符串的一部分包含在内,因此数百万个目标中的每一个都是有效的唯一URL。我可以回收并重用一个curl资源,为每个PUT重新定位它,但这比在TIME_WAIT炼狱中放弃它们并建立新连接要慢得多。虽然这确实有效,但在更新数百万条记录性能时也很重要。

SO_REUSEADDR和SO_REUSEPORT看起来像有趣的想法,但从我能够找到的那些只存在于原始套接字级别。由于我们通过PHP与Curl连接,因此无法找到任何方法来设置它们以确定它们是否有帮助。

在进行我没想过的Couch更新时,是否有一些聪明的方法可以回收卷曲资源? 有没有办法在PHP中为Curl设置SO_REUSEADDR / PORT? 在我完成“curl_close()”后,有没有办法加快资源的发布?

0 个答案:

没有答案