61
Обработка данных в RTB: быстро, дешево и на 98% точно

Обработка данных в RTB: быстро, дешево и на 98% точно

Embed Size (px)

DESCRIPTION

Доклад на Highload++2014

Citation preview

Page 1: Обработка данных в RTB:  быстро, дешево и на 98% точно

Обработка данных в RTB: быстро, дешево и на 98% точно

Page 2: Обработка данных в RTB:  быстро, дешево и на 98% точно

Павел Калайдин @facultyofwonder

Page 3: Обработка данных в RTB:  быстро, дешево и на 98% точно

данных очень многопамяти разумно мало

хотим все знать за один проходвремя обработки - константно

Page 4: Обработка данных в RTB:  быстро, дешево и на 98% точно

max, min, mean

Page 5: Обработка данных в RTB:  быстро, дешево и на 98% точно

Как посчитать медиану?

Page 6: Обработка данных в RTB:  быстро, дешево и на 98% точно

Случайная выборка?

Page 7: Обработка данных в RTB:  быстро, дешево и на 98% точно

reservoir sampling?возможно

Page 8: Обработка данных в RTB:  быстро, дешево и на 98% точно

Вероятностные алгоритмы

Page 9: Обработка данных в RTB:  быстро, дешево и на 98% точно

сойдет приблизительный ответхотим знать распределение ошибки

Page 10: Обработка данных в RTB:  быстро, дешево и на 98% точно

frugal <- function(stream) {

m <- 0

for (val in stream) {

if (val > m)

m <- m + 1

else if (val < m)

m <- m - 1

}

return(m)

}

Page 11: Обработка данных в RTB:  быстро, дешево и на 98% точно

def frugal(stream):

m = 0

for val in stream:

if val > m:

m += 1

elif val < m:

m -= 1

return m

Page 12: Обработка данных в RTB:  быстро, дешево и на 98% точно

Ограничение по памяти - 1 int!

def frugal(stream):

m = 0

for val in stream:

if val > m:

m += 1

elif val < m:

m -= 1

return m

Реально работает

Page 13: Обработка данных в RTB:  быстро, дешево и на 98% точно
Page 14: Обработка данных в RTB:  быстро, дешево и на 98% точно

Персентили?

Page 15: Обработка данных в RTB:  быстро, дешево и на 98% точно

Демо: bit.ly/frugalsketch

def frugal_1u(stream, m=0, q=0.5):

for val in stream:

r = np.random.random()

if val > m and r > 1 - q:

m += 1

elif val < m and r > q:

m -= 1

return m

Page 16: Обработка данных в RTB:  быстро, дешево и на 98% точно

Потоковый + вероятностный = скетч

Page 17: Обработка данных в RTB:  быстро, дешево и на 98% точно

Что мы хотим?Знать число уникальных

пользователейaka мощность множества или кардинальное число

Page 18: Обработка данных в RTB:  быстро, дешево и на 98% точно

Что мы хотим?Знать число уникальных

пользователейпо сайтам, интересам, временным

интервалам

Page 19: Обработка данных в RTB:  быстро, дешево и на 98% точно

Когда мы это хотим?Прямо сейчас

Page 20: Обработка данных в RTB:  быстро, дешево и на 98% точно

Данные:1010 элементов,

109 уникальных int3240Гб

Page 21: Обработка данных в RTB:  быстро, дешево и на 98% точно

Решение в лоб: хеш-таблица

Page 22: Обработка данных в RTB:  быстро, дешево и на 98% точно

Хеш-таблица:4Гб

Page 23: Обработка данных в RTB:  быстро, дешево и на 98% точно

HyperLogLog:1.5кб, 2% ошибка

Page 24: Обработка данных в RTB:  быстро, дешево и на 98% точно

Все начинается с алгоритма LogLog

Page 25: Обработка данных в RTB:  быстро, дешево и на 98% точно

Представьте, что сегодня утром я бросал монетку и записал, какое максимальное число раз подряд

выпала решка

Page 26: Обработка данных в RTB:  быстро, дешево и на 98% точно

2 раза100 раз

Page 27: Обработка данных в RTB:  быстро, дешево и на 98% точно

В каком случае я бросал дольше?

Page 28: Обработка данных в RTB:  быстро, дешево и на 98% точно

Нас интересуют паттерны в хешах входных значений

(число 0 = решек в начале)

Page 29: Обработка данных в RTB:  быстро, дешево и на 98% точно

Хешируем, не семплируем!*

* нужна хорошая хеш-функция

Page 30: Обработка данных в RTB:  быстро, дешево и на 98% точно

Ждем:0xxxxxx хешей - ~50%1xxxxxx хешей - ~50%00xxxxx хешей - ~25%

и т.д.

Page 31: Обработка данных в RTB:  быстро, дешево и на 98% точно

оценка - 2R, где R - максимальное число

лидирующих нулей

Page 32: Обработка данных в RTB:  быстро, дешево и на 98% точно

Я могу провести несколько экспериментов с подбрасыванием монетки и записать результаты на

листок бумаги

Page 33: Обработка данных в RTB:  быстро, дешево и на 98% точно

И взять среднее число

Page 34: Обработка данных в RTB:  быстро, дешево и на 98% точно

Этот способ называется - стохастическое усреднение

Page 35: Обработка данных в RTB:  быстро, дешево и на 98% точно

Напомню, текущая оценка - 2R, где R - максимальное число

лидирующих нулей

Page 36: Обработка данных в RTB:  быстро, дешево и на 98% точно

Будем использовать M корзин, в каждой из которой будем запоминать

свой R

Page 37: Обработка данных в RTB:  быстро, дешево и на 98% точно

где ɑ - нормирующая константа

Page 38: Обработка данных в RTB:  быстро, дешево и на 98% точно

Это и есть LogLog алгоритм

Page 39: Обработка данных в RTB:  быстро, дешево и на 98% точно

LogLog

SuperLogLog

Page 40: Обработка данных в RTB:  быстро, дешево и на 98% точно

LogLogSuperLogLog

HyperLogLogсреднее гармоническое, а не арифметическое

+ некоторые поправки

Page 41: Обработка данных в RTB:  быстро, дешево и на 98% точно

Число корзин и длина хеша - определяют ошибку

Page 42: Обработка данных в RTB:  быстро, дешево и на 98% точно

LogLogSuperLogLogHyperLogLog

HyperLogLog++Google, 2013

32 -> 64bit + поправки для маленьких мощностей

bit.ly/HLLGoogle

Page 43: Обработка данных в RTB:  быстро, дешево и на 98% точно

LogLogSuperLogLogHyperLogLog

HyperLogLog++

Discrete Max-CountFacebook, 2014

bit.ly/DiscreteMaxCount

Page 44: Обработка данных в RTB:  быстро, дешево и на 98% точно

Large scale?

Page 45: Обработка данных в RTB:  быстро, дешево и на 98% точно

Объединение без потери точности!

Page 46: Обработка данных в RTB:  быстро, дешево и на 98% точно

У нас есть два HLL-скетча, возьмем максимальное значение из каждой

корзины

Page 47: Обработка данных в RTB:  быстро, дешево и на 98% точно

Voila! Результирующий скетч не потерял в точности

Page 48: Обработка данных в RTB:  быстро, дешево и на 98% точно

Код: bit.ly/hyperloglog

Page 49: Обработка данных в RTB:  быстро, дешево и на 98% точно

Временное окноbit.ly/SlidingHLL

Page 50: Обработка данных в RTB:  быстро, дешево и на 98% точно

Проверка на вхождение - старый добрый фильтр Блума

Page 51: Обработка данных в RTB:  быстро, дешево и на 98% точно

ih1

h2

hk

1 1 10 0 0 0 0 0 0 0 0 0 0 0 0

Page 52: Обработка данных в RTB:  быстро, дешево и на 98% точно

Сколько раз мы встречали человека в интернете за эту неделю?

Page 53: Обработка данных в RTB:  быстро, дешево и на 98% точно

Ответ - Count-Min скетчbit.ly/CountMinSketch

Page 54: Обработка данных в RTB:  быстро, дешево и на 98% точно

w

i

+1

+1

+1

h1

h4

hd

d

Оценка - возьмем минимум из d значений.

Page 55: Обработка данных в RTB:  быстро, дешево и на 98% точно

хешируем, не семплируемдаем приблизительный ответ

экономим памятьобрабатываем по мере поступления

этот слайд - “скетч” всего доклада

Page 56: Обработка данных в RTB:  быстро, дешево и на 98% точно

Много разных скетчей для разных задач:

персентили,частоты,

коэффициент Жаккара (похожесть множеств)

Page 57: Обработка данных в RTB:  быстро, дешево и на 98% точно
Page 58: Обработка данных в RTB:  быстро, дешево и на 98% точно

Это развивающаяся область: stay tuned!

Page 59: Обработка данных в RTB:  быстро, дешево и на 98% точно

Еще по теме:

Блог Neustar Research:bit.ly/NRsketchesОбзор скетчей:bit.ly/SketchesOverviewЛекции по потоковым алгоритмам:bit.ly/streaming-lectures

Page 60: Обработка данных в RTB:  быстро, дешево и на 98% точно

Спасибо за вниманиеи

happy sketching!

Знаете, как посчитать экономнее и точнее? [email protected]

Page 61: Обработка данных в RTB:  быстро, дешево и на 98% точно

Бонус:

HyperLogLog на SQL:bit.ly/HLLinSQL