web-dev-qa-db-ja.com

同じテーブルに「ビューカウント」列があっても大丈夫ですか?

YouTubeに似たウェブサイトで、各動画の「視聴回数」を保存して表示しているとします。実際のビューテーブルと同じテーブルにビューカウント列を格納する場合は問題ありません。つまり、ビデオ情報を定義する行ですか。または、視聴カウント情報を格納する別のテーブルを用意する必要があります-つまり、ビデオID、タイトル、説明などのビデオ情報を格納する2つのテーブルと、列を持つなど、カウントのみを格納する別のテーブル:ID、 video_id、view_count

私がこれを尋ねる理由は、明らかにビュー数列が年間を通じて何度も更新される必要があるためです-100万ビューとしましょう。同じデータベースに「ビュー数」があると、他のユーザーのメインビデオを読むときに、その列を1日何回もビュー数を書き込むためにロックする必要があるため、パフォーマンスが低下するのではないかと思います。ビデオテーブルはコンテンツがかなり静的であり、ほとんど読み取りのみであるためです。

おかげで、

4
bravekido

通常「ビュー数」、「いいね」、「ヒット」などの個別のテーブルを用意することをお勧めします。この追加のテーブルには、IDとカウンターのみが含まれます。 idはメインテーブルと一致します。新しいテーブルで行が欠落している場合は、0を意味します(または、必ず0の行を追加することができます)。次に、メイン情報とカウントが必要な場合は、_LEFT JOIN_(またはJOIN)を使用します。 auto_incrementは必要ありません。ただPRIMARY KEY(video_id)です。

問題の一部は、そのテーブルに影響を与えない他のアクティビティーに対してカウンターを常にバンプすることによるロック/デッドロックを回避することです。

1日に何百万ものビューが表示される場合は、それがそれ自体につまずかないようにする方法を検討する必要があります。

3
Rick James