2

多くの人気のあるソーシャル ネットワーキング プラットフォームに似た (同じ) システムのアクティビティ フィード (ストリーム? より正確には「ライフストリーム」) を構築する必要があります。私の最初の試みは 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 つの問題 (おそらく、私がこのテクノロジに慣れていないため) は、メッセージが「消費者」によってフェッチされると、キューから削除されますが、それを持続させたいということです。任意の時間。

4

1 に答える 1

2

私があなたに与えたいいくつかのヒント:

  • RDBMS を使用しないでください。たとえばredisのようなインメモリ (FAST) データベースを使用してください。redisベンチマークから私に同意していただければ幸いです。redis はかなり高速です。別の補足として、redisのインストールは子供の遊びであることを指摘したいと思います:)。

    作る

C を使用する PHP 用のredis-clientがあるため、これも非常に高速になります。- 私が正しく理解していれば、pubsubhubbub はメッセージ キューと同じだと思いますが、そうではありません。

PubSubHubbub プロトコルを使用するパーティ (サーバー) は、関心のあるトピック (フィード URL) が更新されると、(Webhook コールバックを介して) ほぼ瞬時に通知を受け取ることができます。

対メッセージキュー:

コンピューター サイエンスでは、メッセージ キューとメールボックスは、プロセス間通信または同じプロセス内のスレッド間通信に使用されるソフトウェア エンジニアリング コンポーネントです。これらは、メッセージング (制御またはコンテンツの受け渡し) にキューを使用します。

同じだと思うかもしれませんが (いくつかの類似点があります)、同じではありません。私のメッセージ キューでは、redis を使用します (基本的なメッセージ キューも備えているため、redis は非常に強力です :))。rpushを使用して、メッセージ (作業単位) をキューに入れることができます。

rpush <name of queue> <message>

次に、ワーカー プロセスから、 brpopを使用してキューからメッセージを受信できます(pop のブロック :))

brpop <name of queue> 0

ワーカー プロセスのスポーンはcliから開始されてメモリに保持されるため、PHP をメモリに何度もロードするオーバーヘッドが発生しません。

php worker.php

これがあなたのためのものであることを願っています。何か質問があれば、喜んでお答えします ;)

于 2011-01-19T21:40:02.617 に答える