2016-10-13 6 views
0

期間(日、週、月、年など)別に動画を並べ替えることができます。大量のデータをリアルタイムで集計して集計する

現在のところ、すべてのデータはMySQLにあり、基本的にセットアップは "videos"テーブルと "view"テーブルで、video_id、session_id、およびdatetimeカラムの行が含まれています。

「最多視聴」でソートするには、指定された期間内のすべてのビュー行をカウントするCOUNT()を使用して、各ビデオに対して計算フィールドが生成されます。これは今は "時"や "日"のような期間は正常に動作しますが、 "月"や "年"のような期間は長い時間がかかります。

これはスケーラブルではないという問題があります。数千の動画があり、ほとんどの動画では毎月何千もの再生回数が発生し、毎月合計で数百万回の再生回数になっています。

私はスケーラブルな一般的な解決策を求めています。このようなものはMySQLでも実行可能か、別のデータベースを検討すべきですか?使用統計(またはログ)については

答えて

0

データ次集計戦略を使用することができる。

  • を事前に計算する集合体(例えば、「今日」は含まない)いくつかの期間の前に。 OLAPサーバーはこれを実行できますが、一般的なソリューションが不要な場合は、カスタムコードを使用して簡単に行うことができます。これらの集計は、期間が終了すると(たとえば、1日の始めに)再計算する必要があります。
  • 実際の結果をリアルタイムで取得するには、「今日」の集約のみを実行する必要があります。速く動作しますが、訪問者が多い場合は、この集約を短時間(たとえば数秒間)キャッシュすることもできます。
  • あなたが「最も閲覧」の結果を選択する必要がある場合、あなたは(今日の前に、すべての統計による)事前に計算された凝集体を組み合わせて、今日の統計でそれらをマージする必要がありますが、あなたに応じて、リアルタイムに

を集約しますこのストラテジーは、データベース層(集計を事前計算して特殊な一時表に保管するストアード・プロシージャーを作成する場合もあります)またはアプリケーション・レベル(またはその両方)のいずれかで使用できます。