多くの人気のあるソーシャル ネットワーキング プラットフォームに似た (同じ) システムのアクティビティ フィード (ストリーム? より正確には「ライフストリーム」) を構築する必要があります。私の最初の試みは RDBMS を使用することでしたが、膨大な量の JOIN が必要なため、すぐにそのアイデアをやめました。他の可能な(そしてより適した)アプローチを探していたところ、次の投稿に出くわしました。
ソーシャル ネットワーキング Web サイトは、友人の更新をどのように計算しますか?
メッセージ キューを利用するようにとのアドバイスを受けて、RabbitMQ とその PubSubHubbub プロトコルの研究に時間を費やしました。そして、私は次のアプローチを仮定しました:
1) 各ユーザーには「トピック」があります
2) 他のユーザーがトピックにサブスクライブします
3) ユーザーが何らかのアクションを実行すると、メッセージが公開され、メッセージが関連付けられ (参照が解決されます)、フォーマットされます (人間に優しい言語、リンクなど)。 ) および集計 (X、Y、および Z は投稿 P にコメントしています) を PHP スクリプトで行います。
ただし、各メッセージを調べて処理する必要があります (私のアプローチが完全に間違っていない限り)。では、すべてを RDBMS に格納することと、メッセージ キューを使用すること (PubSubHubbub プロトコルの実装以外) の違いは何でしょうか?
そのようなシステムを構築するためのより効率的な方法はありますか? (あれば具体的に教えてください)
コメント/提案/批判は大歓迎です。:)
前もって感謝します!
PS: FriendFeed の実装方法に関する興味深い記事があります ( http://bret.appspot.com/entry/how-friendfeed-uses-mysql )。しかし、私は「ハッカー」が MySQL を快適な領域から追い出しているように感じます (これは単なるリレーショナル データであり、リレーショナル データなしで RDBMS を使用するポイントは何でしょうか?)
PPS: 私が見たメッセージ キューを使用するもう 1 つの問題 (おそらく、私がこのテクノロジに慣れていないため) は、メッセージが「消費者」によってフェッチされると、キューから削除されますが、それを持続させたいということです。任意の時間。