Как сделать пакетный запрос FQL-запросов в графе API? - PullRequest
2 голосов
/ 09 марта 2012

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

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

  • Может кто-нибудь дать объяснение с примером использования пакетного запроса запросов fql?
  • К какому времени сократится время обработки запроса?
  • Есть ли другой способ сократить время выполнения многих запросов FQL?

Ответы [ 3 ]

4 голосов
/ 09 марта 2012

// $ current_user = facebook id

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

2 голосов
/ 09 марта 2012

Вместо того, чтобы вызывать каждый FQL-запрос отдельно, почему бы не использовать FQL Multiquery?

http://developers.facebook.com/docs/reference/rest/fql.multiquery/

ОБНОВЛЕНИЕ В противном случае, если вы не хотите, используйте мультизапросЯ думаю, что вы ищете здесь .Я не смог найти больше информации о FQL и Batch.

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
...