2016-12-20 19 views
0

私たちはチャットサービスを実装しています。私はテーブルデザインに関するいくつかの入力をしたいと思います。私たちのサービスはMySQLを使用しており、DBにはスレッドとメッセージの2つのテーブルがあります。スレッドテーブルにはすべてのチャットスレッドが格納され、Messagesテーブルにはすべてのメッセージが格納されます。チャットスレッドは複数のメッセージを持つことができますが、メッセージは1つのスレッドにしか属しません。各メッセージは、messageIdというMessagesテーブルの列で識別されます。チャットサービスのテーブル設計に関するパフォーマンスの考慮

私たちのサービスでは、時々各スレッドの最後のメッセージのmessageIdを取得する必要があります。 2つのオプションがあります:

1 add a column called lastMessageId to Threads to keep track of the last message; each time a message is inserted into Messages table, we need to update Threads table as well; 

2 each time we need the last message's id, perform a query on Messages table to find the last message; 

私はどのオプションをとるべきですか?

答えて

0

私はオプション2に行くことをお勧めします、以下の理由があります。

  1. あなたは、あまり頻繁ではないことを意味する最後のメッセージIDの時間が必要だと言いました。 クエリを時々行うのは、すべての挿入に対してUpdate操作を行うよりも集中的ではありません。

  2. メッセージテーブルにインデックスを作成して、クエリをさらに細かく調整することができます。

関連する問題