0

私は MySQL データベースの構造を開発していますが、その構造に関する小さな決定上の問題に直面しました。

私は2つのテーブルを持っています:

  1. サイトに公開されたすべてのメッセージ。
  2. サイトに公開されたすべてのコメント。

すべてのメッセージには、複数のコメントを関連付けることができます。メッセージとそれに関連するコメントを関連付けるより良い方法は何ですか?

  1. 関連するメッセージの ID を含むコメント用のフィールドを用意します。
  2. 関連するコメントの ID の配列を json 形式で含むメッセージ用のフィールドを用意します。

通常、最初の方法が使用され、次に MySQL クエリが使用されて、対応するメッセージの message_id を持つコメントが検索されると思います。しかし、何十万ものコメントがある場合、どれだけ効率的でしょうか?

この場合、json 文字列をデコードし、正確な一意の ID でコメントにアクセスすると、より効率的かつ高速になりますか?

それが重要な場合、バックエンドにpythonを使用しています。

4

2 に答える 2

1

最初のオプションは行く方法です。したがって、次のようになります。

コメント ID | メッセージ ID | コメントテキスト | タイムスタンプなど

MySQL テーブルの場合、パフォーマンスを向上させるために、最初の 2 つの列にインデックスを作成するように指定できます。
10Mio コメントは正常に動作するはずですが、事前にテスト シナリオを使用してこれをテストすることもできます。

さらに計画を立てたい場合は、約 100,000 件のコメントの後、次のことができます。

  • メッセージあたりの平均コメント数を決定する
  • 約 500 万件のコメントに必要なメッセージの数を決定する
  • 500 万件のコメントに 50,000 件のメッセージが必要だとしましょう
  • comment_table1 [..] comment_table9 をデータベースに追加します
  • Python 内で切り替える: message_id > 50,000 の場合 -> comment_table2 などを確認します。
  • もちろん、それに応じてコメントを保存する必要があります

これは、多数のエントリに対してパフォーマンスが高いはずです。

個々のホスティング (パフォーマンス) 環境に合わせて数値を調整できます...

于 2013-05-20T12:59:34.703 に答える
0

オプション 1 が最善の方法です。message_idコメント テーブルの列にインデックスが必要です。これにより、MySQL は、何十万ものコメントがある場合でも、特定のメッセージのすべてのコメントを迅速かつ効率的に引き出すことができます。

于 2013-05-20T11:33:04.543 に答える