Опитвам се да разбера дизайна на системата зад 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 често срещани елемента по разпределен мащабируем начин?