0

Digg のような Web サイト用。どのように MYSQL を使用して、誰かが記事を気に入ったかを追跡できますか?

いいねの総数を追跡するだけで十分に簡単に思えます。私が理解していない部分は、1. ユーザーが何かに 1 回しか投票しないようにする方法と、2. ユーザーが自分のプロフィールをクリックして気に入ったストーリーを表示できるようにする方法です。

コンマで区切られたユーザー名を追加するだけのストーリー情報を含むテーブルに列がありますか? 誰がストーリーを気に入ったかを追跡することはできますが、特に 100,000 人以上のユーザーがいる digg のような Web サイトでは、データが膨大になります。また、ユーザーが気に入ったすべてのストーリーを表示するにはどうすればよいでしょうか?

ありがとうございました。

4

3 に答える 3

1

いいねごとに行が必要になります。コンマ区切りのリストは使用しないでください。


方法 1. ユーザーが何かに 1 回しか投票しないようにする

articleid、userid に一意のインデックスを作成します。


また、ユーザーが気に入ったすべてのストーリーを表示するにはどうすればよいでしょうか?

SELECT articleid FROM likes WHERE userid = 42

しかし、データは膨大になります

はい、それは巨大になる可能性があります。ほとんどの Web サイトは、1 つのデータベースだけで簡単に処理できます。非常に大規模な Web サイトでは、クラスタを使用して複数のマシンにデータを保存する必要があります。アプリケーションがデータを検索するサーバーを認識できるように、データを分割する必要があります。

于 2012-05-25T06:23:00.197 に答える
0

好きなものは、story_id と user_id の 2 つの列を持つ、story_likes という別のテーブルに格納できます。

1) データベースに、これらの組み合わせが一意でなければならないという制約を設定します。そうすれば、ユーザーは一度だけストーリーを高く評価できます。
2) ユーザーが気に入ったストーリーをこのテーブルから取得し、ストーリー ID を使用して他のストーリーの詳細を取得できます。MYSQL データベースの場合、100,000 行はそれほど大きくありません。

また、state=ENUM('LIKED', 'DISLIKED') の列を持つことで、ユーザーがストーリーを嫌いになれるようにすることもできます。

于 2012-05-25T06:24:17.773 に答える
0

最近のソーシャル ネットワークでは、Graph dataStructure のようなものです。人、写真、ビデオ、ステータスの更新、コメントなどのすべてのエンティティがグラフのノードであり、好きでないものは 2 つのノード間の接続です。

理想的には、「いいね!」を追加するだけの「いいね!」のテーブルが必要です。誰が気に入ったか、列で何が気に入られたか、その他の情報を保存する場所。

複雑なソーシャル ネットワークは、これ以上のことを行います。

于 2012-05-25T06:23:16.370 に答える