1

タイトルが複雑なのは知っていますが、アドバイスを探していたところ何も見つかりませんでした。

私が正しい方法を考えているかどうか尋ねたいだけです。

私のウェブサイトのアイテム(画像、記事など)のために約10個のアイテムでトップのFacebook共有ページを作成する必要があります

そして、これは簡単です。FacebookグラフAPIから共有数を取得し、データベースで更新します。fb共有に基づくajax呼び出しでは作成したくないので、誤用される可能性があります。

すべてのアイテムには、最終更新の日時があり、データベースに日付といいねのフィールドを作成します。

また、24時間、7日、1か月で上位の共有URLを作成する必要があるため、アイデアは単純です。

  1. ユーザーがアイテムを表示します。10分ごとに、このURLのfbグラフAPIから共有カウントが取得され、データベースで更新されます。データベースには、最終更新時刻も保存されます。
  2. ユーザーがアイテムを表示するたびに、サイトは最終更新日時を確認します。10分を超える場合は、fbapi呼び出しを行って更新します。fbapi呼び出しを下げるのは10分ごとです。

これは基本的には機能しますが、問題があります-並行性。

アイテムが選択されたら、phpで最後の更新が10分以上前かどうかを確認し、次にfb apiを呼び出してから、共有カウント(現在よりも大きい場合)と残りのデータを更新します。呼び出しにはコストがかかり、fbapiの使用量を減らすことができます。

したがって、ユーザーがアイテムを表示するまで、アイテムは更新されますが、更新は選択に依存しており、時間チェックとリモート呼び出しのために1つのSQLステートメントでそれを行うことができないため、1人のユーザーが入力してから別のユーザーが入力できます。数分後、fb apiを何度も呼び出し、何度も更新する可能性があります。ユーザーが増えるほど、呼び出しと更新が増えますが、これは適切ではありません。

これを修正する方法をアドバイスしますか?私はそれを正しくやっていますか?たぶんもっと良い方法がありますか?

4

1 に答える 1

0

APIチェックをユーザーの操作から完全に切り離し、ユーザーに関係なく、別のスケジュールされたプロセスで10分ごとにFacebookデータを収集することができます。

または、このイベント駆動型モデルを追求したい場合は、「ミューテックス」の使用を検討する必要があります。基本的に、チェックプロセスが現在実行中であり、別のプロセスを実行しないことを示すフラグをどこかに(ファイルやデータベースなどで)設定します。

于 2013-03-11T06:40:05.320 に答える