GoogleマップへのHTTP逆ジオコーディング(緯度、経度 - >アドレス)リクエストを作成するのにPHPとCURLを使用しています。私はプレミアアカウントを持っているので、スロットルやブロックせずにたくさんのリクエストを行うことができます。PHPカールパフォーマンスのボトルネックGoogleマップのジオコーディングリクエストを作成する
残念ながら、パフォーマンスの上限に達しました。逆ジオコーディングが必要な毎日約50万件のリクエストがあります。
時間と空間を節約するために、コードはかなり些細なものです(私は擬似コードで書く)。次のコード部分は、ジョブを介して15秒ごとに呼び出されます。
<?php
//get requests from database
$requests = get_requests();
foreach($requests as $request) {
//build up the url string to send to google
$url = build_url_string($request->latitude, $request->longitude);
//make the curl request
$response = Curl::get($url);
//write the response address back to the database
write_response($response);
}
class Curl {
public static function get($p_url, $p_timeout = 5) {
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $p_url);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, $p_timeout);
curl_setopt($curl_handle, CURLOPT_TIMEOUT, $p_timeout);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($curl_handle);
curl_close($curl_handle);
return $response;
}
}
?>
パフォーマンスの問題は、CURL要求のようです。彼らは非常に遅いです、おそらくそのすべてのHTTP要求をすべての操作を行うためです。私たちは100mbpsの接続を持っていますが、フルスピードで動作するスクリプトは約1mbpsしか使用していません。サーバー上の負荷は本質的に何もありません。サーバーはクアッドコアで、8GBのメモリを搭載しています。
これのスループットを高めるためにできることは何ですか? Googleマップで永続的な(キープアライブ)HTTPリクエストを開く方法はありますか?水平に作業を展開する、つまり同時に50のリクエストを作成する方法はありますか?
ありがとうございました。
あなたはその回答をお待ちしています。 Curlはキープアライブ要求を行うことができます。カールのドキュメンテーションも検索する必要があるのは、HTTPパイプライニングです。パイプライン処理はHTTP/1.1プロトコルの追加であり、あなたの問題のためだけに行われます。 HTTPキープアライブセッションを使用するのではなく、要求のグループごとにリクエストを送信し、グループごとに結果を取得します。 libcurlはHTTPパイプライニングをサポートしています。 Googleマップサーバーがあなたからのパイプラインを許可していて、GET要求しかなく、パス内に奇妙なプロキシがあまりない場合は、多くのperfsを得ることができます。 – regilero