Top Banner
Big Data aggregation techniques by Valentin Logvinskiy
31

Big Data aggregation techniques

Dec 25, 2014

Download

Software

Big Data aggregation techniques
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Big Data aggregation techniques

Big Data aggregation techniques

by Valentin Logvinskiy

Page 2: Big Data aggregation techniques

А кто ты такой ?● 5 лет опыта в web (кроме фриланса)● 3 года в highload (3k+ request/min)

● 5k requests/min● >1Tb raw data● Real time analytic

Проект

Page 3: Big Data aggregation techniques

«Big Data как секс у подростков: - все говорят об этом, - никто реально не знает что это такое и что с этим делать, - каждый думает, что другие уже успешно это делают и - каждый заявляет что тоже успешно это делает.» (с) просторы интернета

“Данные становятся большими тогда, когда их размер превращается в самостоятельную проблему” (с) Роджер Магулас

Для нас Big Data началась с 10 млн. записей

И что ? Сколько данных это Big Data ?

Page 4: Big Data aggregation techniques

➔ HLL (Hyper Log Log)➔ Суммирующие таблицы➔ Partitioning, Sharding

Page 5: Big Data aggregation techniques

HyperLogLog (HLL)

Page 6: Big Data aggregation techniques

SELECT COUNT(id) FROM tbl WHERE {...}

SELECT COUNT(DISTINCT token) FROM tbl WHERE {...}

Суммарное количество ивентов по фильтрам

Уникальное количество пользователей по фильтрам

Page 7: Big Data aggregation techniques

400 msg/second = 24000 msg/minute

1440000 msg/hour = 34560000 msg/day

1 036 800 000 msg/month ( 1 млрд )

Да сколько там тех ивентов !

Мы используем Postgres.Структура таблиц (изначальная)

Page 8: Big Data aggregation techniques

Фильтры ?

Page 9: Big Data aggregation techniques

Distinct ?

SELECT COUNT(DISTINCT token) FROM tbl WHERE {...}in 40220 ms -> 11194 unique from 3489541 recordsin 340220 ms -> 27616 unique from 9658465 records

SELECT COUNT(*) FROM ( SELECT token,COUNT(token) FROM tbl WHERE {...} GROUP BY token) q111194 ms -> 27616 unique from 9658465 records

Оптимизация запроса через группировку

Page 10: Big Data aggregation techniques

Как жить дальше ?

MapReduce !!!!

Проблемы работы с исспользованием MapReduce

● Пользователь должен получить результат за допустимый промежуток времени (5-10 секунд)

● Если использовать препроцессинг (подсчитать все возможные варианты которые может выбрать пользователь) то это будет очень долго

Page 11: Big Data aggregation techniques

HyperLogLog (HLL)

http://blog.aggregateknowledge.com/tag/hyperloglog/http://metamarkets.com/2012/fast-cheap-and-98-right-cardinality-estimation-for-big-data/https://github.com/aggregateknowledge/postgresql-hll

● Bit observable patterns

● Stochastic averaging

● Harmonic averaging

● KMV (K minimum value)

Page 12: Big Data aggregation techniques

Как это работает

Page 13: Big Data aggregation techniques

Postgres + HLL

--- Make a dummy table

CREATE TABLE helloworld (

id integer,

set hll

);

--- Insert an empty HLL

INSERT INTO helloworld(id, set) VALUES (1,

hll_empty());

--- Add a hashed integer to the HLL

UPDATE helloworld SET set = hll_add(set,

hll_hash_integer(12345)) WHERE id = 1;

--- Or add a hashed string to the HLL

UPDATE helloworld SET set = hll_add(set, hll_hash_text

('hello world')) WHERE id = 1;

--- Get the cardinality of the HLL

SELECT hll_cardinality(set) FROM helloworld WHERE id =

1;

Page 14: Big Data aggregation techniques

SELECT ceil(hll_cardinality(hll_union_agg(set))) FROM unique_hll WHERE (...)

125 ms

42012237 unique, >8000000000 records (80 млрд)

А поможет ?

Page 15: Big Data aggregation techniques

Но есть нюанс ...

● Занимает много места на жестком диске

● Погрешность до 3%

Page 16: Big Data aggregation techniques

Суммирующие таблицы

Page 17: Big Data aggregation techniques

Справимся и так !

Amazon EC2, c1.xlarge (4 CPU, 420Gb)

SELECT COUNT(id) FROM event WHERE {...}

Да, да, да. Индексы стоят, работают. Да, partitioning тоже включен и работает.

55 ms -> 342282 records 1714 ms -> 4014783 records7524 ms -> 20109099 records

Page 18: Big Data aggregation techniques

Что делать ?

Page 19: Big Data aggregation techniques

Для связывания этих таблиц исспользуется тригер OnInsert который делает +1 в поле cnt, если совпадают event_type,campaign_id,item_id,date.

Page 20: Big Data aggregation techniques

Но есть нюанс...

Batch insert

2014-02-10 00:20:39 UTC [21166]: [3-1] user=****,db=**** ERROR: deadlock detected2014-02-10 00:20:39 UTC [21166]: [4-1] user=****,db=**** DETAIL: Process 21166 waits for ShareLock on transaction 1623260082; blocked by process 21162. Process 21162 waits for ShareLock on transaction 1623260084; blocked by process 21164. Process 21164 waits for ExclusiveLock on tuple (16351,53) of relation 87300951 of database 16422; blocked by process 21166.

INSERT INTO tbl VALUES (...),(...),(...),(...)

Page 21: Big Data aggregation techniques

Выход ?1. Переписать код на UPDATE и убрать тригерры

2. Игнорировать ошибку, уменьшив уровень изолированости транзакций

3. Ваш вариант

Page 22: Big Data aggregation techniques

Partitioning

Page 23: Big Data aggregation techniques

Для чего это нужно?

SELECT COUNT(*) FROM events WHERE date > ‘2014-01-01’ AND date < ‘2014-02-01’

20569s -> 66527031 from 200109099 records

Page 24: Big Data aggregation techniques

Partitioning by date

Page 25: Big Data aggregation techniques

Postgres partitioningCREATE TABLE events_01_2014 ( CHECK ( event_date >= DATE ‘2014-01-01’ AND event_date < DATE ‘2014-02-01’ )) INHERITS (events);

+ триггер, окончание которого:RETURN NULL;

Что делать если нет таблицы ?Добавляем в триггер

IF NOT EXISTS( SELECT * FROM information_schema.tables WHERE table_name = tableName) THEN EXECUTE 'CREATE TABLE '||tableName||' (...) INHERITS (‘||TG_TABLE_NAME||’);';END IF;

Page 26: Big Data aggregation techniques

Поможет ?

2569s -> 66527031 from 66703033 records

Page 27: Big Data aggregation techniques

Sharding

Page 28: Big Data aggregation techniques

Зачем это нужно ?

Page 29: Big Data aggregation techniques

Sharding by event type

Таблицы каждого типа находятся на своих серверах БД, что существенно уменьшает загрузку CPU

Page 30: Big Data aggregation techniques

Q & A

Page 31: Big Data aggregation techniques

Thank you !