讓我們來簡單FQL
查詢來獲取昨天以來通過用戶的朋友共享,例如所有鏈接:如何優化我的FQL以避免Facebook超時?
SELECT link_id, title, url, owner, created_time
FROM link
WHERE
created_time > strtotime('yesterday') AND
owner IN (
SELECT uid2 FROM friend WHERE uid1 = me()
)
LIMIT 100
如果用戶有50個好友,這將完全執行。但是,如果用戶擁有數百個朋友,則Facebook往往會返回錯誤。
選項:
- 極限的朋友選擇查詢到50 - 當然,這會工作,但它會表現出同樣的朋友每次。除非你想要一個常春藤聯盟飼料,這不是很有幫助。
- 批量查詢 - 使用偏移量創建一批查詢,並將每個查詢限制爲50個。不幸的是,這裏也沒有任何改進。
- Loop It - 到目前爲止,這是我找到的最好的。循環執行爲批量查詢構建的相同查詢,但每次使用多個api fql查詢調用執行一個查詢。但即使這是打擊和錯過。
如何正確查詢Facebook以確保成功結果?
注:
- 我使用的是最新的Facebook SDK PHP 3.1.1
- 我也試過在base_facebook.php延長卷曲超時默認選項
與超時相關的常見錯誤:
1.
Fatal error: Uncaught Exception: 1: An unknown error occurred thrown in /..../facebook/php-sdk/src/base_facebook.php on line 708
線708是個例外錯誤:
// results are returned, errors are thrown
if (is_array($result) && isset($result['error_code'])) {
throw new FacebookApiException($result);
}
2.
Fatal error: Uncaught CurlException: 52: SSL read: error:00000000:lib(0):func(0):reason(0), errno 104 thrown in /..../facebook/php-sdk/src/base_facebook.php on line 814
謝謝德魯。通過註釋base_facebook.php中的例外(708和814),我能夠移除錯誤。除了在過去一週內能夠通過500多個(洗牌)用戶的鏈接遍歷的方式外,還有一些例外。到目前爲止,它一直保持在500.我會看看是否可以找到另一個天花板時間。謝謝你的幫助。 – Ryan
我只注意到created_time沒有編入索引。這可能解釋了超時問題。我也想過通過link_id進行排序,但事實證明link_id也不對應於created_time。似乎矯枉過正必須要求所有link_id纔能有效地拉動上週。但直到他們索引這一專欄,這是我們擁有的最好的。 – Ryan