Google トレンド (または Twitter のような大規模なトレンド機能) の背後にあるシステム設計を理解しようとしています。
課題:
トレンドを計算するために大量のデータを処理する必要があります。
フィルタリングのサポート - 時間、地域、カテゴリなどによる
アーカイブ/オフライン処理のために保存する方法が必要です。フィルタリングのサポートには、多次元ストレージが必要になる場合があります。
これが私の仮定です (私は MapReduce/NoSQL テクノロジの実際の経験がありません)。
ユーザーからの各検索項目は、保存されて最終的に処理される一連の属性を維持します。
タイムスタンプ、検索地域、カテゴリなどによる検索のリストを維持するだけでなく、
例:
Kurt Cobain
用語を検索しています:
Kurt-> (Time stamp, Region of search origin, category ,etc.)
Cobain-> (Time stamp, Region of search origin, category ,etc.)
質問:
検索語の頻度を効率的に計算するにはどうすればよいですか?
言い換えれば、大規模なデータ セットが与えられた場合、分散型のスケーラブルな方法で上位 10 の頻度の高いアイテムをどのように見つけるのでしょうか?