ホームページ  >  記事  >  バックエンド開発  >  Weiboユーザーテーブルのデザイン

Weiboユーザーテーブルのデザイン

WBOY
WBOYオリジナル
2016-06-23 13:40:381684ブラウズ



クエリ要件は次のとおりです:
1. どのユーザーがフォローされているかをクエリします。
2. どのユーザーがフォローされているかを確認します。
3. ユーザーと共有されているウォッチ リストをクエリします。
4. 相互フォローしているかどうかを確認します。

テーブルを使用して、user_id follow_user_id add_time 列の形式で上記の関数を実装します。
ただし、注目量が比較的多いため、ユーザーIDごとにテーブルを分割する必要があります。テーブル構造を適切に設計する方法がわかりません。

友達、アドバイスをお願いします。ありがとうございます


ディスカッションに返信(解決策)

ユーザーIDを使用してパーティション化します

ユーザーID、各テーブル間でユーザーIDを使用します

ユーザーIDを使用してパーティション化します



モデレータ 私は私がしたいですユーザー ID を使用してテーブルを分割しますが、テーブルを分割した後では、上記の機能を実装するのは困難です。例えば、どのユーザーが自分をフォローしているかを確認したいのですが、テーブルを分割した後、どのテーブルを確認すればよいかわかりません。すべてのサブテーブルを一度確認することによってのみ知ることができます。

別のフォローリストを保存することはできますか?
、あなたをフォローしているユーザーをユーザーリストに保存することはできますか?

テーブルを分割した後にどのテーブルをクエリするかわからないため、テーブルを分割することはできませんが、パーティション化することができます
パーティション分割されたテーブルは、依然としてテーブル全体であり (複数のファイルに分割されていますが)、実際のクエリは次のとおりです。ファイルはあなたではなく mysql によって決定されます

それでもテーブルを自分でパーティション分割したい場合は、user_id 列と follow_user_id 列の内容を交換して新しいテーブルを形成し、その後 2 つのテーブルをパーティション分割する必要があります


ユーザー ID を使用してパーティションを分割する



モデレーター ユーザー ID を使用してテーブルを分割したいのですが、テーブルを分割した後、上記の機能を実装するのは簡単ではありません。例えば、どのユーザーが自分をフォローしているかを確認したいのですが、テーブルを分割した後、どのテーブルを確認すればよいかわかりません。すべてのサブテーブルを一度確認することによってのみ知ることができます。
テーブルを分割せず、SQL ステートメントを直接記述するだけです

1. どのユーザーがフォローされているかをクエリします: select `follow_user_id` from `table` where `user_id`='your id'
2. どのユーザーがフォローされているかをクエリしますここで: select `user_id` from `table` where `follow_user_id`='your id'
3. 特定のユーザーの共通フォローリストをクエリします。 select * from `table` where `user_id` in ('your id', 'a user id')
4. 相互にフォローしているかどうかをクエリします: select * from `table` where `user_id`='your id' and ` follow_user_id`='a user id' `user_id` in (select `follow_user_id` from `table` where `user_id`='a user id')

もちろん、おそらくもっと良い書き方があるでしょう、特に 4 番目の方法記事

select * from `表` where `user_id`='你的id' and `follow_user_id`='某个用户id' and `user_id` in (select `follow_user_id` from `表` where `user_id`='某个用户id')
記事 4 に が抜けているので、書き直してください

テーブルを分割した後にどのテーブルをチェックするかわからないからといって、テーブルを分割することはできませんが、パーティション化することはできません
パーティション分割されたテーブルは、依然としてテーブル全体ですあなた テーブル (複数のファイルに分割されていますが)、実際にクエリされるファイルはあなたではなく mysql によって決定されます

それでも自分でテーブルを分割したい場合は、user_id 列と follow_user_id 列の内容を交換する必要があります新しいテーブルを作成し、その 2 つを比較します それぞれのテーブルを分割します



ご回答ありがとうございます 参考にさせていただきます

テーブルを分割した後にどのテーブルを確認すればよいかわからないからといって、テーブルを分割することはできませんただし、パーティション化します
パーティション化されたテーブルは、あなたにとっては依然としてテーブル全体です (複数のファイルに分割されていますが)。どのファイルが実際にクエリされるかは、あなたではなく mysql によって決定されます

それでも自分でテーブルを分割したい場合は、 user_id 列と follow_user_id 列の内容を交換して新しいテーブルを形成し、その 2 つのテーブルのサブテーブルをペアにする必要があります



モデレータ パーティショニングの概念とは何ですか。私はコンピューターのパーティショニングしか理解していません

この文について詳しく教えていただけますか

「次に、user_id 列と follow_user_id 列の内容を交換して新しいテーブルを形成し、その後 2 つのテーブルを別々のテーブルに分割する必要があります。」

ありがとうございます!

テーブルのパーティショニングについては、http://www.baidu.com/s?ie=utf-8&bs=mysql%E5%88%86%E5%8C%BA%E8%A1%A8&f=8&rsv_bp=1&wd= を参照してください。 mysql %E5%88%86%E5%8C%BA&rsv_sug3=1&rsv_sug=1&rsv_sug1=1&rsv_sug4=26&inputT=796

アテンションは次のように一方向にすることもできます

user_id follow_user_id1       21       31       4

user_id でテーブルを分割した後、次のように取得できますfollow_user_id に接続されているすべてのテーブル user_id をチェックします
したがって、follow_user_id によってグループ化されたテーブルの別のセットが必要です
follow_user_id user_id 2              13              14              1

关于表分区可参见  http://www.baidu.com/s?ie=utf-8&bs=mysql%E5%88%86%E5%8C%BA%E8%A1%A8&f=8&rsv_bp=1&wd=mysql%E5%88%86%E5%8C%BA&rsv_sug3=1&rsv_sug=1&rsv_sug1=1&rsv_sug4=26&inputT=796

关注可以是单向的,比如这个

user_id follow_user_id1       21       31       4

按 user_id 分表后,你整检查所有的表才能得到与 follow_user_id 相连的 user_id
所以你需要另有一组以 follow_user_id 分组的表
follow_user_id user_id 2              13              14              1



版主  
"follow_user_id 分组的表" 也是要分表的吧
那这个方案可以支持查,哪些人关注了我吗。
比如我的用户id是1    按follow_user_id 尾数进行分表。


follow_user_tbl_1

follow_user_id user_id 
1               1
11              1
21              1

follow_user_tbl_2

follow_user_id user_id 
2               1
12              1
22              1

如果 user_id follow_user_id 表示 user_id 被 follow_user_id 关注
那么 follow_user_id user_id 表示 follow_user_id 关注了 user_id

你把主体确定了,事情就清楚了

单独保存一个关注表
或者把关注你的用户也存到用户表里可行不?



单独保存一个关注表不大可行   因为数据量太大啦 

关注我的用户存到用户表不合理  

如果 user_id follow_user_id 表示 user_id 被 follow_user_id 关注
那么 follow_user_id user_id 表示 follow_user_id 关注了 user_id

你把主体确定了,事情就清楚了



版主  吾听了你的,开始明白你的想法啦。 谢谢了。要分表可能只有这样啦

ollow_user_tbl_1

follow_user_id user_id 
1               1
11              1
21              1

follow_user_tbl_2

follow_user_id user_id 
2               1
12              1
22              1

楼上说的不就是一个用户关联表么?为什么是两个?一个就可以实现这个功能了。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。