Я пытаюсь понять дизайн системы для Google Trends (или любой другой такой крупномасштабной функции тренда, как Twitter).
Задачи:
Необходимость обработки большого количества данных для расчета тренда.
Поддержка фильтрации - по времени, региону, категории и т.д.
Нужен способ хранения для архивирования/автономной обработки. Для поддержки фильтрации может потребоваться многомерное хранилище.
Это мое предположение (у меня нет практического опыта использования технологий MapReduce/NoSQL)
Каждый элемент поиска от пользователя будет поддерживать набор атрибутов, которые будут храниться и в конечном итоге обрабатываться.
А также ведение списка поисков по отметке времени, региону поиска, категории и т. д.
Пример:
Поиск Kurt Cobain
термина:
Kurt-> (Time stamp, Region of search origin, category ,etc.)
Cobain-> (Time stamp, Region of search origin, category ,etc.)
Вопрос:
Как они эффективно вычисляют частоту поискового запроса?
Другими словами, учитывая большой набор данных, как они находят 10 наиболее часто встречающихся элементов распределенным масштабируемым образом?