2017-10-22 10 views
1

node.jsとMongoDBにソーシャルネットワークタイプのアプリケーションを開発しています。 - のような機能を追加したいと思います。ユーザAがユーザBに従っている場合、ユーザBが何かを投稿すると、自動的にユーザAの壁に来るはずです!ノードアプリケーションのすべてのフォロワーにリアルタイムフィードを取得する方法

アプローチ1 - これは私が研究を持っているもの、ユーザBのチャネルを作成し、他のすべてのユーザーがそのチャネルにサブスクライブ 今までとするとき、ユーザBポスト何かが、すべての加入者にsocket.ioであることを発するです。 このアプローチでは、新しいユーザーが毎回サインアップするときにチャンネルを作成することを考えています。

しかし、問題はある - は、どのように私はどのユーザーやMongoDBの中にチャンネルを保存する方法があるとするチャネルを知っていますため、この実現可能なアプローチです。 私はあまりにも多くのチャネルを作成すると私のサーバーがクラッシュするでしょうか?

アプローチ2 - 私が持っている

別のアプローチは、

あるデータベースのソースユーザーのフォロワーを検索します。 そして、socket.ioを使用してすべてのフォロワーにフィードを送信します。 各ユーザーのフォロワーが100人で、毎回ユーザーの投稿がある場合は、データベースの検索でオーバーヘッドが作成されます。レディスキャッシングを使用すると、フォロワーを保存する方が良いでしょうか? 、代わりの はRedisのからとsocket.io

アプローチ3使用してMSGを発することがわかりfollowers-チェック - 私はRedisのパブ/サブの名前を聞いたが、どのように見つけることができなかった

をそれは私のアプリケーションで動作します。

このような作成には、いくつかの基準をお勧めします。 上記のアプローチがうまくいけば、あなたは私にその流れを提案することができますか?それのためのコードを作成するにはどうすればいいですか?

あなたが私に例を教えていただければ幸いです。

答えて

1

私はあなたがApproach 2を使うことができると思いますが、そのためにキュー(redis queueまたはrabbitMQ)を作成する必要があります。 私はあなたが投稿を作成するとき、あなたのDBの100,1000フォロワーにメッセージをプッシュするためにキューにプッシュする必要があることを意味します。

+0

この最適化を行うには、フォロワーを赤字で保存しますか?だから毎回バックエンドデータベースをチェックする必要はありませんか? – kartik

+0

私たちはフォロワーにすぐにメッセージを送る必要がないので、その必要はありません。そのため、ジョブをキューで実行してそのことを実行できます。 DBからのクエリだけです。 –

関連する問題