これはソーシャルネットワーキングサイトに関するものです。 Facebookを私たちのモデルにしよう。Facebookの壁紙ページのデータベースパフォーマンスを改善する
mysqlサーバにテーブルがあります:すべての投稿のプリコードを保持するための 'posts'(簡単にするためにコメントを除く)。その列は:
id、post、user_id、frnd_id_1、frnd_id_2です。
id:主キー、自動インクリメント。
ポスト:壁に書かれたポスト(それがログインしているユーザーや、彼/彼女の友人のいずれかの1つの壁も)
のuser_id:ログインしているユーザーのID(Aを想定)
friend_id_1:ログインしているユーザーの友人(Bと仮定)。このフィールドは、AがBの壁に書き込むときに使用されます。
friend_id_2:友人(Cを想定)ログインユーザ
の友人のacccordingly MySQLのテーブルに記録されたAとBの間の任意のメッセージの対応関係が存在する場合。
BがCの壁に何かを書いたとすると、Bの友人はその壁にそれを見ているとします。 Bさんに100人の友達がいるとします。上記のようにして、このテーブルにそのレコードを保存することができます。frnd_id_2は、CのIDのレコードを保持するために使用されます。
frind_2が他の「0」のレコード、isonly USER_IDとfrnd_id_1間のメッセージの対応を、持っている場合、それはfrnd_id_1がfrnd_id_2の壁に書かれたとfrind_id_1がUSER_IDの友人であることを意味します。
これまでは、すべてが顔面っぽいとまったく同じだと思います。
But -
Bに100人の友人がいるとします。その場合、BがCの壁に書き込む場合(すべてのプライバシー設定が友人の友人に対して開かれていると仮定します)。上記の方針が採用された場合、テーブルに10130レコードがあります:
1)BがCの壁(frnd_id_2 = 0)に掲示されていることを意味する1レコード(MAIN RECORDとしましょう)
2)Bの100人の友人のための別の100レコード
これは私が私の脳に持っている方法です。完全なメッセージではなく、メインレコードのIDである 'post'カラムに(または 'post'カラムを空白にして別のもの、つまりmain_record_idを作成して)保存することで、もう少し改善することができます。
しかし、事実です:単一の投稿の場合、101 dbクエリ(この場合)を実行する必要があります。 dbのパフォーマンスを向上させる他の方法はありますか?
私はスクリプト言語としてPHPを使用しています。
なぜ否定的なマーキングですか?任意の説明plz? –
最初は質問が間違っていました。ご心配なく。 – duffymo
-ve評価を削除できませんか? –