Здравствуйте, Sinclair, Вы писали:
C>>Вот у тебя табличка на 10Тб, которая хранится на 4 машинах (шардинг по ID) — пусть это будет табличка AdView с записями просмотра рекламы. Нужно из неё сделать join на другую таблицу, пусть будет Users, которая хранится на других 4 машинах. Это означает, что в кластере будет примерно тонна кросс-траффика между узлами. S>А можно пример "реального" запроса c join? S>Это что, типа "покажи мне адреса top-100 пользователей по количеству просмотров баннера #12323451"?
Типа: "компания, баннер которой пользователь кликал наиболее часто, для каждого пользователя".
S>Если нет — то приведите "на пальцах" такой запрос. И примерный план его выполнения на NoSQL, который помогает избегать "тонны кросс-траффика между узлами".
Для NoSQL:
1) Делаем map на таблицу click, доставая оттуда пользователя.
2) Делаем reduce — считаем и группируем по пользователям.
3) Делаем постобработку — выбираем самую частую компанию (можно тоже через map-reduce).
Первые два шага могут выполняться на узлах, на которых лежат данные, так как операция reduce здесь ассоциативна.