ユーザー名とパスワードで登録された何十億ものユーザーがいる単純な Web サイトを考えてみましょう。そして、彼らはこのウェブサイトにメッセージを投稿することができます. ユーザーを検索して、そのユーザーの投稿をすべて表示できます。
この構造を次のように設計します。
user (id, name, password)
1 arne <pass>
2 jeff <pass>
...
99999999999999999 erik <pass>
post (id, message)
1 hello
2 test
3 hey
...
post_user (puid, postid, userid)
1 1 1
2 2 1
3 3 2
これにより、 arneの id (1) を検索し、これを post_user テーブルと posts テーブルに結合して、彼のすべての投稿を取得することで、すべての投稿を簡単に表示できます。
数百万のユーザーに向けられた数百万のメッセージを想像すると、postとpost_userテーブルがかなり巨大になることを想像します。したがって、次のモデルが非常に大規模な環境で役立つかどうか疑問に思っていました。すべてのユーザーに対して一意の posts テーブルを作成するとします。
user (id, name, password)
1 arne <pass>
2 jeff <pass>
...
99999999999999999 erik <pass>
post1 (id, message)
1 hello
2 test
post2 (id, message)
3 hey
次に、id を見つけてselect from ("post" + userid)を実行することで、1 人のユーザーによるすべての投稿を取得できます。つまり、参照するテーブルがはるかに小さくなります。
このように働くことは有益でしょうか? 私が考えることができる問題は、約100万のpost1、post2、...、postxテーブルがあり、それぞれがストレージを占有し、それらを変更すると災害になることです。