Как выполнить пакетный запрос fql-запросов в graph api?


У меня 4-5 запросов fql в одной функции. Выполнение каждого из них занимает 2-4 секунды. Всего для выполнения всей этой функции требуется 14-15 секунд. Пользователю требуется долго ждать. Поэтому я хочу сократить это время обработки. (В PHP недостаточно хорошо поддерживается концепция многопоточности.)

Я слышал о концепции пакетных запросов в graph api. И я много гуглил, но не понимал, как использовать пакетный запрос для запросов fql в graph api.

  • Может кто-нибудь дает объяснение с примером использования пакетного запроса запросов fql?
  • К какому времени сократится время обработки запроса?
  • Существует ли какой-либо другой способ сократить время выполнения многих запросов fql?
Author: Somnath Muluk, 2012-03-09

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
 2
Author: thermz, 2012-03-09 12:29:25

Обновлено:

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/

 7
Author: Alexander Nenkov, 2012-03-09 11:09:16

//$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 секунды.

 4
Author: Somnath Muluk, 2012-03-14 06:07:10