0

問題文:私は、ユーザーが他のユーザー (Twitter や他の電子商取引サイトなど) をフォローして、自分のウォールで最新情報を入手できるアプリケーションに取り組んでいます。ユーザーは任意のマーチャントをフォローできます。ユーザー自身がマーチャントになることができるので、実際にはユーザーが他のユーザーをフォローしているようなものです (多対多の現実)。

問題:最も簡単な方法は、 id (自動インクリメント) |を持つジャンクション テーブルを用意することでした 。follower_user_id | followed_user_id . しかし、データベースがいつ垂直方向に拡大するか、どの程度拡大するかはわかりません。ユーザーが 100 人をフォローしている場合、1 人のユーザーに対して 100 のエントリがあります。その場合、任意のユーザーのフォロワーを取得したい場合は、時間がかかります。クエリの実行時間。

調査: Twitter や他の Web サイトや DB の設計を調べてみましたが、彼らは問題を解決するためにグラフ ベースの Nosql などのさまざまなデータベースを使用しています。値を水平に保存できる方法はあります。つまり、各ユーザーは自分のフォロワーを1行に保持します(私が試したようにカンマで区切るのは面倒です)。

この機能のために、Nosql ベースのデータベース (mongo など) のような別のデータベースを使用できますか。さまざまなケースで、パフォーマンスにどのような影響がありますか?

簡単な方法を使用するという私のアプローチが正しい場合、たとえば 5 ~ 10,000 人のユーザーのパフォーマンスを改善するにはどうすればよいでしょうか?基本的な mysql クエリはうまく機能しますか?

同じことを入力してください。

4

2 に答える 2

0

コメントを調べていくつかの調査を行った後、通常の方法でフォロワーテーブルを作成し、インデックスを作成してキャッシュメカニズムを使用する方がよいという結論に達しました。

提案された複合インデックスとしてのインデックス作成はうまく機能します。キャッシングには Memcache を使用する予定です。

于 2013-05-06T14:16:20.973 に答える