2016-04-16 5 views
0

現在、グループチャットの開発中です。開発者の協力のために特別に開発されました。私は現在、1つのロビー(チャットルーム)のみを含むシステムから、各ユーザーが独自のロビー(ロビーID付き)を持つことができるように移行中です。私のデータベースをより良く組織するには

それぞれのユーザーにロビーIDを割り当てて、ログイン時に正しいメッセージが読み込まれるようにします。データベース内の特定のロビーの正しいメッセージを表示するために、各メッセージに固有のロビーIDを割り当てます。これは私が現在実装しているものです。各ロビーににそのメッセージを入れて、独自のテーブルを与えるスマートなアイデアであるかどう

しかし、私は思っていた。

そうすれば、代わりに1台20万件のメッセージを持っていることの一日を、彼らは可能性があり多くのテーブル間で分散され、クエリ時間が短縮されます。

提案?

+2

いいえ、しないでください。コンテンツに応じてテーブルを生成しないでください。 –

+0

2つのテーブルを非アクティブロビーに、1つをアクティブロビーにすることができます。ロビーが閉鎖されると、そのメッセージは非アクティブなロビーのメッセージにフラッシュされます。この方法でテーブルをできるだけ小さく保つことができます。 – Mahmoud

+0

もう1つは言った:それをしないでください。あなたのDBは数ヶ月後に混乱し、確実にあなたのワンテーブルにロールバックします。 [Key Partionning](http://dev.mysql.com/doc/refman/5.1/en/partitioning-key.html)は、おそらくパフォーマンスが主な関心事であるかどうかを調査するためのコースです。キーは明らかにあなたのchat_idでなければなりません。実際には、特定のチャットルームでのクエリは(ほとんど)別のテーブルにあるかのように実行されます。 –

答えて

0

さて、各チャットルームごとにユニークなテーブルを作成するのはかなり悪い考えです。それはあなたがより良いパフォーマンスを与えるように聞こえ、そうかもしれません。しかし、それは保守と将来の変更をより困難にし、あなたのDBを大きな混乱にさせ、結局は得られない利益をあなたに与えることはありません。

すべてのチャットメッセージのテーブルを作成し、メッセージと関連するチャットルームとの間に接続する「チャットID」/「LobbyID」列を作成する必要があります。

次に、その列にセカンダリインデックスを作成するか、またはそれをパーティションキーとして使用する必要があります。そうすれば、あなたは良いパフォーマンスを得ることができますが、テーブルの混乱はありません。

これが役に立ちます。

関連する問題