Как выполнить пакетный запрос fql-запросов в graph api?
У меня 4-5 запросов fql в одной функции. Выполнение каждого из них занимает 2-4 секунды. Всего для выполнения всей этой функции требуется 14-15 секунд. Пользователю требуется долго ждать. Поэтому я хочу сократить это время обработки. (В PHP недостаточно хорошо поддерживается концепция многопоточности.)
Я слышал о концепции пакетных запросов в graph api. И я много гуглил, но не понимал, как использовать пакетный запрос для запросов fql в graph api.
- Может кто-нибудь дает объяснение с примером использования пакетного запроса запросов fql?
- К какому времени сократится время обработки запроса?
- Существует ли какой-либо другой способ сократить время выполнения многих запросов fql?
3 answers
Вместо того, чтобы вызывать каждый запрос FQL отдельно, почему бы не использовать мультизапрос FQL?
Http://developers.facebook.com/docs/reference/rest/fql.multiquery/
ОБНОВЛЕНИЕ В противном случае, если вы не хотите использовать мультизапрос, я думаю, что вы ищете здесь. Я не смог найти ничего больше о FQL и пакетной обработке.
curl \
-F 'access_token=…' \
-F 'batch=[{ "method": "POST", \
"relative_url": "method/fql.query?query=select+name+from+user+where+uid=4", \
}]
https://graph.facebook.com
Обновлено:
https://graph.facebook.com/?batch=[{"method":"GET","relative_url":"me"},{"method":"GET","relative_url":"me/friends?limit=50"}]&access_token=ACCESS_TOKEN&method=post
Более подробная информация здесь: http://developers.facebook.com/blog/post/2011/03/17/batch-requests-in-graph-api/
//$current_user=идентификатор facebook
$query1="SELECT uid, name FROM user WHERE is_app_user=1 AND uid IN (SELECT uid2 FROM friend WHERE uid1 = $current_user)";
$query2="SELECT uid, name, work_history FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = $current_user )";
$query3="SELECT uid, name, work, education FROM user WHERE uid = $current_user";
$queries = array(
array('method'=>'GET', 'relative_url'=>'method/fql.query?query='.str_replace(' ','+',$query1)),
array('method'=>'GET', 'relative_url'=>'method/fql.query?query='.str_replace(' ','+',$query2)),
array('method'=>'GET', 'relative_url'=>'method/fql.query?query='.str_replace(' ','+',$query3))
);
$objs = $facebook->api('/?batch='.json_encode($queries), 'POST');
$objs получает массив json всего результата трех запросов.
И это значительно экономит время. Эти 3 запроса по отдельности занимают в общей сложности 9 секунд. При многозадачности это занимает 7 секунд. А при пакетном запросе это занимает 3,6 секунды.