我正在尝试找出 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 个频繁项?