回答:
ビューの記録は非常に単純です。「ビュー」アクションを表す行をテーブルに追加するだけです。データベースでロックが必要ないため、これは高速です。ヒープの最後に行を追加するだけです。
これをビューの合計数に集約するには、次のようなことが必要ですSELECT COUNT(*) FROM ...
。つまり、計算の進行中にテーブルをロックする必要があります。または、UPDATE ... SET num_views = num_views + 1
誰かがその行を表示するたびに、その特定の行をロックすることも必要です。
したがって、スケーラビリティの観点からは、誰かがビデオを見るたびに行を追加してからSELECT COUNT(*) FROM ...
、10分ごとに行う方がはるかに効率的です。
YouTubeのアーキテクチャ、またはリレーショナルデータベースを使用してデータを保存するかどうかは実際にはわかりませんが、使用する原則はほとんど同じです。データの挿入は安価で、値の集計は(比較的)高価です。
num_views = num_views + 1
は許可されないその他の種類のことを示すグラフを生成することもできます。
大規模なサイトを拡張するには、いくつかの段階でキャッシュを実行する必要があります。これは、ページキャッシング、サブページキャッシング、および/またはレコードキャッシングです。これらすべての組み合わせが有効になっている可能性があります。たとえば、新しいコメントが追加されるまでYouTubeページがキャッシュされている場合、誰かがコメントを投稿するまでに少し遅れが生じます。
ページビューを測定する方法はいくつかあります。
上記の項目のうち、1つのオプションを除くすべては、更新がバッチで行われることを示唆しています。ビューの数は、時間的に重要な属性ではないため、これで問題ありません。ただし、バックエンドデータベースが追いつけないために、YouTubeで動画を視聴するのを待たせることは、時間を要する行動です。つまり、データベースの列を更新しても、YouTubeほどの規模のサイトでは機能しません。彼らが最後のオプションを選んだとしても、私は個人的には驚かないでしょう。Webサーバーは、使用しているIP、ページへの参照方法など、訪問ごとに多数の情報を記録します。これらをバッチで処理し、必要に応じて結果を要約することは意味があります。