2012-02-26 8 views
2

私はfqlクエリによってFacebookからデータを取得しようとしています。 私がやってみたいことの一つは、それぞれの呼びかけたレコードを取得することです。私は 'LIMIT [開始]、[終了]'コマンドでこれをやろうとしていますが、それらの数字の間のレコードを私に返すと仮定します。 [end] - [start]レコードを取得する代わりに、返されるレコードの総数が記録されます。私はレコードの乱数を取得し、私はチェックして、私はそこにあるより多くのレコードを取得しようとしていないことを確認することができます。FQLのリミットは予想よりも少ない結果を返します

LIMIT例:

http://graph.facebook.com/fql?q=SELECT actor_id, message,description FROM stream WHERE source_id =5878435678 Limit 2,10 

これは7つのレコードを返すと仮定(カウントは0から始まります)と私は3レコードを取得します。 面白いthigは私が10の代わりに50を書いた時です。私は26のレコードを持っています。

私が求めたレコードの正確な量を得る方法を誰かに教えてもらえますか? タンクが先です!

答えて

12

Facebookのエンジニアによるこのブログ記事では、この現象について説明しています。

http://developers.facebook.com/blog/post/478/

ここにあなたの質問に対処する部分は、あなたが返される結果の数は常に指定された「リミット」に等しい ではないことに気づくかもしれません...

です。これは予想される動作です。クエリ のパラメータは、私たちの最後に適用され、返された結果が表示されているかどうかを確認するためにチェックされます。このため、予想よりも少ない結果しか得られない可能性があるのは です。

下記これはまた、あなたが手動で独自のクエリを構築しているときならば、 あなたには、いくつかのテーブルと接続してその認識すべきである意味

...ブログエントリの最良の部分です が「オフセット」パラメータを指定している場合、 を指しているN番目の結果は、上記の のステップ2の3番目の結果のように返されないことがあります。これは、ページングを困難かつ混乱させる可能性があります。

笑、あなたは私を殺しているFacebook!なぜ、「困難で混乱している」よりも、それを真っ直ぐにして一貫性を持たせてみませんか?

+0

+1この記事を前に読んでいますが、すぐに見つけられませんでした。 – ifaour

+0

@Why:スピード。 「通常の」フェッチを先に実行してからTHENフィルタリングを行うと、クエリのキャッシュが少し簡単になります(あまり意味がありません)。それ以外の場合は、予測不可能な量のデータをフェッチする必要がありますか、Bはデータベースレイヤーにすべての可能な組み合わせのアクセス許可の特定のクエリを実行させます。だから、私たちはそれに対処しなければなりません。 :) –

+0

いいえ、ほとんどのSQLシステムは信じられないほどの速度で正しく処理することができ、要求された量のデータを取得します。なぜFQLシステムは、Facebookがそのブログエントリに基づいて「誇りに思っている」ようなプログラマ/デザインの決定に過ぎないのか?私がFQLチームのデベロッパーであった場合、この冒険的な「ショートカット」が使用されていると、私は恥ずかしく思います。 – DMCS

関連する問題