Примеры использования базы clickhouse для анализа данных.
Экспорт данных access.log в clickhouse. Примеры анализа скорости пользователей на основе логов сервера.
2. Немного истории:
Примерно 2011 год.
Запускаем внутреннюю статистику для коммерческого проекта
Хранилище данных - mysql
На старте около ~ 50_000 событий в сутки
3. Рост объемов данных
Популярность растет, количество событий с каждым месяцем увеличивается
конец 2011 ~ 200_000
конец 2012 ~ 800_000
конец 2013 ~ 1_600_000
ну вы поняли….
4. Проблемы по мере эксплуатации
Через 6-8 месяцев уперлись в скорость SATA HDD
Через год перестало хватать 32Gb ОЗУ
Расширение собираемых данных (alter table на таблицу > 50Gb)
Шардирование данных
Агрегация данных на уровне логики приложения
Внезапно данные нужно бекапить. (вы бекапили 500Gb mysql ?)
Как восстановить бекап базы ~500Gb ??????
5. Yandex открывает Clickhouse в OpenSource
15 июня 2016 статья на хабра
сравнения с:
Коммерческие OLAP СУБД (Vertica, etc) - Дорого
Облачные решения. (Google BigQuery) - Постоянно платит за облако
Надстройки над Hadoop. (Spark SQL) - сложно
Open-source OLAP СУБД. (Apache Kylin) - только что узнал, что они есть
6. Clickhouse - изучение
Вышла новая DB - я обязан ее попробовать на зло админам
Яндекс решал схожие проблемы в масштабах яндекса.
Мы снова homepage на фоне яндекса
Загрузим наши statistic_dump.sql
7. Ограничения Clickhouse
Нет значения NULL
Нет DELETE, UPDATE в привычном понимание
Партиционирование по месяцам
Объемные вставки и редкое чтение (>1000rosw, ~100rps)
8. Отличительные возможности ClickHouse
1. По-настоящему столбцовая СУБД.
2. Сжатие данных.
3. Хранение данных на диске.
4. Параллельная обработка запроса на многих процессорных ядрах.
5. Распределенная обработка запроса на многих серверах.
6. Поддержка SQL.
7. Векторный движок.
8. Обновление данных в реальном времени.
9. Наличие индексов.
10. Подходит для онлайн запросов.
11. Поддержка приближенных вычислений.
12. Поддержка вложенных структур данных. Поддержка массивов в качестве типов
данных.
13. Поддержка ограничений на сложность запросов, а также квот.
14. Репликация данных, поддержка целостности данных на репликах.
9. Пратика clickhouse
Изучаем типы данных в CH и создаем таблицу
cat dump.sql | conver.pl | clickhouse-client --query='INSERT INTO stat FORMAT
Values'
Нет NULL
обязательно поле типа date для построения индекса (event_date)
cat stat.tsv | curl
'http://localhost:8123/?query=INSERT%20INTO%20ip20FORMAT%20TabSeparat
ed' --data-binary @-
10. Clickhouse - ощущения
Легко установить для работы
Быстрая вставка большими блоками
есть ресурсы? параллельная вставка в несколько потоков
500Gb mysql -> 40Gb Clickhouse
Это реально быстрые агрегации по сырым данным
Переход на CH позволит не увеличивать мощности еще 2-3 года
Можно добавить новый функционал
11. Что мы анализировали в Сlickhouse
Данные внутренней статистики
Пример экспорта access.log - https://goo.gl/Gfpg3R
netflow (gz ~ 40Gb)
Скорость подсетей на основе nginx access.log
12. Пример как быстро провести анализ скорости
Выбираем данные нужные для анализа
вход: cat access.log | awk '{print $2 , $5 " " $6, $11, $NF}' | format.pl >
вывод 1: 89.22.160.111 [16/Jan/2017:06:46:58 +0300] 2990159 0.147
вывод 2: 2017-01-16t2017-01-16T03:46:58t37.193.8.145t365617t0.003
экспорт: curl … | ip:8123?... FORMAT TabSeparated
13. Примеры запросов
Большое количество встроенных функций для анализа
toStartOfHour(datetime) - разбивка по часам
toStartOfFiveMinute(datetime)
IPv4StringToNum(ip)
IPv4NumToStringClassC(ip_num)
Функции для работы с URL
много других ….