0

ユーザー名とパスワードで登録された何十億ものユーザーがいる単純な 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 テーブルに結合して、彼のすべての投稿を取得することで、すべての投稿を簡単に表示できます。

数百万のユーザーに向けられた数百万のメッセージを想像すると、postpost_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テーブルがあり、それぞれがストレージを占有し、それらを変更すると災害になることです。

4

1 に答える 1

0

これがうまくいくかどうかはわかりませんが、ポストの長さの指定数があると言うなら、はい、できます。

2 つのテーブルを持つことができます。

  1. ログイン -- ID、ユーザー名、パスワード

  2. メッセージ -- id、post_data、date_time_stamp。

したがって、クエリを実行すると、次のようなことができます

select * from messages where id==//生成したID

これは、人が投稿したすべての投稿を一覧表示します。

また

特定の日付に人の投稿が必要な場合..

(UIにも同じ種類のdate_time_stampがあると考えてください)

select * from messages where id=="" and date==""; のようにクエリできます。

同様に、時間についても試すことができます...

乾杯

于 2013-09-19T08:01:08.553 に答える