2009-12-06 18 views
5

私はNGOのインスピレーションサイトで働くつもりです。私は、 "Michael recommended apple pie"、 "Johnはチョコレートにコメントしましたケーキ」、 『キャラメルなど』アリスによって8時間前に投稿されたファッジ、パーソナライズされたイベントストリームを実装する方法は?

事は、誰かが唯一のキャラメルやサクランボに興味があるとアップルパイを見るべきではありませんので、これらのイベントは、インタレストベースであるということですまたはチョコレートケーキ。これには多くの順列があり、ユーザーのパーソナライズドイベントストリームをオンザフライで生成することは、かなり高価なデータベースクエリを意味します。

私は、アクションイベントが発生したときに何らかのバックグラウンド処理を行うことで、受信ユーザーと投稿イベント(おそらく単純なSQL JOINテーブル)との関係を事前に生成することを考えました。

イベントに対して数百人のユーザーの設定を評価するために必要な作業は相当なものであるため、作業をトリガするPOSTリクエストの一部として行うことはできないため、別のプロセスでの作業。私は現在、この仕事のためにGearmanを見ていますが、私は非常に提案を受けています。

私は自分の仕事をしてくれる人を探しているわけではありませんが、誰かがこのようなことを経験したことがあれば、私はあなたの考えを聞きたいです。

+0

脚注として、私たちは[Drupal](http://drupal.org/)、PHP、MySQLの上にこれをすべて構築していますが、この作業はDrupal固有ではないので、論外。だから、この種のストリームでの経験があるなら、共有してください:) – mikl

答えて

2

私はソーシャルネットワーキングサイトでニュースストリームを構築した経験がありました。はい、複数のタイプのイベントと複数の関心レベル(またはプライバシー設定やユーザー権限)があると、 。

イベントが生成されるよりも頻繁に表示されるという前提で、誰かがニュースストリームをリクエストするのではなく、ある種の非正規化を行い、イベントが発生したときに潜在的な視聴者を計算するのが理にかなっています。

これらのイベントオブジェクト(クリエイターに関連するもの)をより単純なメッセージオブジェクト(ニュースストリーム上でそれらを見る人々)に変換するバックグラウンドプロセスを実行することをお勧めします。イベントごとに多くのメッセージが表示されることがありますが、これによりフロントエンドへのリクエストがはるかに早くなり、バックグラウンドプロセスに負荷がかかります。

私はGearmanを使用していませんが、アプリの環境をバックグラウンドプロセスでロードし、キューを介して処理するイベントを受け取ることができるようなものなら、おそらく良い考えです。

私の簡単な解決策は、beanstalkdと自分のPHPスクリプトを使用して自分自身をロールバックすることでした。

+0

提案をいただきありがとうございます。私はBeanstalkを見ていきます:) – mikl

1

(あなたがより多くを教えしたい場合があります)あなたのDBが構成されている方法がわからない、しかし

SELECT events.* FROM events, event_tags, user_tags 
    WHERE event_tags.event_id = events.id 
     AND event_tags.tag_id = user_tags.tag_id 
     AND user_tags.user_id = <$user_id> 

のような明白なものは、あなたがすべての上にインデックスを持っていると仮定すると、私には非常に重いようではありません。 place

+0

ええ、イベントを直接照会できるのはうれしいことです(タグ、キーワード、著者、推奨、コメント、使用パターン)を考慮して、将来の変更に柔軟性を持たせながら効率的なインデックスを構築することはできないと考えています。しかし、私は間違っていることが証明されたい。 – mikl

1

これは適切なインデックスで解決できるもののようです。私は、データベースがそれを処理できると仮定してソリューションを構築しますが、データベースの前にサービスを置いて、すべてのクライアントがこの点を通過できるようにします。処理が遅すぎると、このレイヤーにさまざまなタイプのキャッシュを導入できます。ほとんどのパフォーマンスの決定と同様に、それを正面からやろうとするのは良い考えではないでしょう。

+0

(Stereofrogへの私の返事を見てください)考慮すべきデータの複雑さと量を考えると、15-30のジョインをしなくても、どのようにインデックスを作ることができないのでしょうか...そして、MySQLが多くの重いクエリを処理するために、私の意見では、問題を募集しています:) – mikl

1

Facebookはこの種のことを行うための独自のデータベースを開発して公開していますが、それについてはあまりよく分かりませんが、worth a lookと思われます。

+0

私の知る限り、Cassandraは主にストリームデータの格納メカニズムであり、ストリームデータの生成に関係するすべてのものではありません。 – mikl

1

Activityモジュールを見ましたか?

...人々があなたのサイトで行うことを追跡し、これらの活動のミニフィードをブロック、特殊なテーブル、およびRSS経由で提供します。モジュールは拡張可能であるため、他のモジュールと統合することができます。生成されるメッセージは、管理インターフェースを介してカスタマイズ可能であり、コンテキストに依存します。

半ば近い将来このようなことをする必要があるため、あなたが何を思いついているのか不思議です。

+0

いいえ、私はそれをチェックします、ありがとう:) – mikl

関連する問題