2016-11-02 8 views
0

は、私は、ユーザーに通知するには、以下のこれをしたいが、私は品質とスロークエリについて確認していない:sqlでグループチャットの通知を設計するには?

誰かが意志select all members of groupチャットして、各ユーザーのループで、それは意志insertuser_id group_id unseen_message_count SQLチャットグループに新しいメッセージを挿入それはチャット中の各メッセージのためにはあまりにも重すぎます。なぜなら、いつも人々が本当に速く書いて、各メッセージに対してこれをやっているからです。

アップデートバージョン

私のSQLは以下のようなものです:

chat_seen table 

user_id | group_id | unseen_count 

新しいチャットinsertedは、私は、彼らがunseen_countを見ると意志update unseen_count for each user、その後、私はupdate unseen_count to 0でしょう、私がしなければ重いだと思います.Iときこれはグループの各メンバーのために、そうではありませんか?

+2

通知用のメモリストアを使用する、通知用のメッセージキューを使用する、データをポーリングする代わりにソケットを使用する(更新をプッシュするだけで済みます)、アクションを非同期に(非同期に)実行できる他のソリューションユーザーは – JimL

+0

メッセージキューは、このようなアプリケーションのデータベースよりも優れています。 SQLは、pub/subファンアウトシステムとFIFOキューを作るのは本当にひどいです。 – tadman

+0

@JimL通知用のメモリストアが混乱していますか?通知のためにFacebookのデータベースを使用していると聞いていますか?チャットシステムにfacebookのチャット通知の機能がすべて含まれているためですか? – Bucky

答えて

0

あなたの質問は多少曖昧ですが、素晴らしい解決策のように聞こえるわけではありませんが、ひどくはありません。覚えておくべき重要なことは、WHERE文のすべてのフィールドにインデックスがあることを確認することです(例:group_id、user_idなど)。

また、ユーザーごとに最後に読み込まれたメッセージのIDを保存するだけで、メッセージが投稿されるたびに頻繁に更新する必要はなく、その数を計算するのに十分かもしれません。

+0

しかし、私は各ユーザーのために私が見えない人を計算することはできませんが、これを行うことができます:更新された質問を参照してください - – Bucky

+0

私はあなたの解決策に取り組んだが、メッセージが投稿されたときに私はlast_message_idこのユーザーにこれが表示されている場合は、別のオプションがありますか – Bucky

関連する問題