SlideShare a Scribd company logo
1 of 54
Переезжаем
на Yandex ClickHouse
Александр Зайцев
LifeStreet Media
О чем этот доклад
О чем этот доклад
О чем этот доклад
О чем этот доклад
LifeStreet
• Компании 10+ лет, оптимизация рекламных кампаний и
объявлений (ad exchange, ad server, RTB, DSP, DMP и пр XYZ)
• Десятки миллионов $$ денег ежегодно
• 10,000,000,000+ событий (фактов) в день
• Десятки таблиц, сотни метрик
• Внешние и внутренние пользователи, ML-алгоритмы и пр.
• Надежная выверенная инфраструктура на Vertica c 2010 (HL++
2012-2013)
И ВДРУГ…
16.06.16 16:23 Serge, CTO:
Sasha - I am VERY interested in figuring out if this
can work for us. On paper - it is ideal. Their use
case (analytics) is the same as ours. Their example
of heat-map (click data) is same as ours. That it is
FOSS is ideal. Please make investigation a priority
ClickHouse летом-осенью 2016
• 1-5 месяцев в открытом доступе
• Внутренний проект -- первый внешний продукт с непонятными
перспективами
• Нет независимых инсталляций
• Нет поддержки, роадмепа и прозрачности планов
• Всего 3 разработчика
• Много известных ограничений (а сколько неизвестных?)
• Истории других только-что-open-source продуктов
Менеджер: и на «это» заменить продакшн?
В ClickHouse нет:
• Транзакций
• Констрейнтов
• Consistency
• UPDATE/DELETE
• NULLs
• Миллисекунд
• Implicit type conversions
• Нормального SQL
• Произвольного партиционирования
• Средств управления кластером
Разработчик:
и ЭТО
они
называют
DBMS?!
Что нас убедило попробовать
• Близкая предметная область и задача
• Авторитет Яндекса
• Активный интерес сообщества
• Просто интересно!
Результаты пилотного проекта
• Работает!
• Быстро! (не хуже Вертики)
• Много «особенностей»
• Неплохая документация
• Форум на googlegroups
• Алексей Миловидов
Поехали!
Проблема переезда
Схема
• Факты
• Метрики
• Измерения
Две крайности
Все в одной таблице фактов:
• Дорого по диску
• Дорого получить список
• Нельзя ничего изменять
Таблицы-измерения:
• «Плохие» джойны
• Нет update
Схема. Измерения
Статические справочники
Изменяемые справочники
Произвольные атрибуты
Словари (external dictionaries)
• Ключ -> (колонка -> значение)
• Разные источники – файл, MySQL и др.
• Описание в XML, можно 1 файл = 1 словарь
• Обновляемо (см. дальше)
• Доступ через функцию:
dictGet<type>(’<dict_name>',’col_name>', <dict_key>)
Ограничения словарей
• Ключ – только UInt64
• Нет прямого способа получить все значения колонки
• Ограничения по размеру
• Нет обновления on demand или по изменению источника
• Каждый узел кластера обновляется независимо
• Может быть медленно
Как получить значения
create table dim_country (country_key Uint64)
select dictGetString(‘dim_country’, ‘country_name’, country_key)
from dim_country
Оптимизация
select sum(impressions)
from very_big_table
where dictGetString(‘dim_country’, ‘country_code’, country_key) =‘RU’
select sum(impressions)
from very_big_table
where country_key in (select country_key from dim_country
where dictGetString(‘dim_country’,‘country_code’, country_key) =‘RU’)
Обновление словарей
• По таймеру
• Много серверов – много коннектов
• MySQL MyISAM
• Touch конфига
• Shared-файл
Когда все же нужны таблицы?
• Таблицы ключей для словарей
• Атрибуты из веб-трафика
• Джойны по сложному ключу:
• Составной ключ
• Effective Dates
А если надо обновлять таблицу?
Переписывать целиком
или
ReplacingMergeTree
• Eventually заменяется
• OPTIMIZE, FINAL
• Неудобно обновлять отдельные поля
• Разные партишены «не схлопываются»
А если надо удалять?!
• Из таблицы-измерения – никак
• Из фактов -- CollapsingMergeTree
• Грубый аналог «сторно»: +500 + (-500) = 0
• Eventually сторнируется
• Исправить можно только метрики
• Исправляются не данные, а результат агрегации
Сегментация и шардинг
Replicated таблица
Distributed таблица
Distributed таблица
Комбинируем
ClickHouse FarmVille
• Факты – distributed из многих шардов
• Шарды – replicated
• Таблицы-измерения – replicated на
все узлы
• Некоторые таблицы-измерения –
согласовано с фактами
Загрузка – старайтесь share nothing
• Не надо грузить в DISTRIBUTED (режьте кроликов сами!)
• REPLICATED контролирует чек-суммы
• Временные/промежуточные таблицы
Агрегация?
• Яндекс считает, что не нужна
• Aggregated/SummingMergeTree
• MV поверх фактов
10
Доступ к данным. Интересная специфика
• Массивы и функции высших порядков для работы с ними, ARRAY JOIN
• Переобозначения для select-выражений:
• Удобно для условий в where/having:
select sum(очень сложное выражение) a … having a>100;
• Но легко сделать ошибку:
select a b from (select 1 a, 2 b) where b=1;
• ANY vs ALL JOIN
• PREWHERE vs WHERE
• GLOBAL IN, GLOBAL JOIN
• Приблизительные вычисления
А теперь: боль!
• Нет авто-приведений типов
• Нет алиазов таблиц
• Свой синтаксис для JOIN с ограничениями:
• Один (!) джойн на select
• Джойн только через ‘using’
• Нет group by/order by 1,2,3….
• Нет nulls – нет coalesce()
• Через JDBC/HTTP– нет временных таблиц
Доступ к данным. Костыли
• Явные преобразования типов, если не совпадают (словари!)
dictGetString('dim_campaign','tag',toUInt64(cmp_key))
• «Обертки» для джойнов
select *, a1, a2 /* заметьте, ‘*’ относится к основной таблице */
from (select *, b1, b2
from t
any inner join b using (b_key)
)
any inner join a using (a_key)
Доступ к данным. Еще костыли
coalesce(a, b, c, d)
~
arrayFilter(x -> x>0, [a, b, c, d])[1]
Администрирование
Операционные процедуры
• Все очень-очень гибко и очень-очень вручную
• DDL на всех узлах: боль!
• Zookeeper
Очень удобно, говорите?
Залог успешного переезда
• Разобраться в функциональности и ограничениях (куда едем)
• Угадать The Yandex Way (по какой дороге)
• Вступить на эту дорожку или мостить свою
• Не стесняться пробовать и спрашивать дорогу
• Не ругаться на Яндекс – они сделали отличный проект!
Ведь ClickHouse здорово работает!
Спасибо
alexander.zaitsev@webamg.com
alexander.zaitsev@lifestreet.com
alexander.zaitsev@revjet.com

More Related Content

What's hot

Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Ontico
 
MongoDB первые впечатления
MongoDB первые впечатленияMongoDB первые впечатления
MongoDB первые впечатления
fudz1k
 
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Dmitry Degtyarev
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
phpdevby
 
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)
Ontico
 
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
Ontico
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"
Ontico
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Ontico
 

What's hot (20)

Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
Промышленное ускорение сайтов / Николай Мациевский (Айри.рф)
 
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
NewSQL: SQL никуда не уходит / Константин Осипов (tarantool.org)
 
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
Как ускорить MySQL Handler Socket в 9 раз / Александр Яковлев (Мамба)
 
MongoDB первые впечатления
MongoDB первые впечатленияMongoDB первые впечатления
MongoDB первые впечатления
 
No sql.mongodb scaling
No sql.mongodb scalingNo sql.mongodb scaling
No sql.mongodb scaling
 
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
 
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанку
 
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
 
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
 
Дмитрий Долгов
Дмитрий ДолговДмитрий Долгов
Дмитрий Долгов
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
 
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)
Что нужно знать об архитектуре ClickHouse / Алексей Зателепин (Яндекс)
 
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"
 
MongoDB basics in Russian
MongoDB basics in RussianMongoDB basics in Russian
MongoDB basics in Russian
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7""Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"
 

Viewers also liked

Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Ontico
 
Как смигрировать 50Пб в 32 без даунтайма? / Альберт Галимов, Андрей Сумин (Ma...
Как смигрировать 50Пб в 32 без даунтайма? / Альберт Галимов, Андрей Сумин (Ma...Как смигрировать 50Пб в 32 без даунтайма? / Альберт Галимов, Андрей Сумин (Ma...
Как смигрировать 50Пб в 32 без даунтайма? / Альберт Галимов, Андрей Сумин (Ma...
Ontico
 
Archival Disc на смену Blu-ray: построение архивного хранилища на оптических ...
Archival Disc на смену Blu-ray: построение архивного хранилища на оптических ...Archival Disc на смену Blu-ray: построение архивного хранилища на оптических ...
Archival Disc на смену Blu-ray: построение архивного хранилища на оптических ...
Ontico
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Ontico
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
Ontico
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
tfmailru
 

Viewers also liked (20)

MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
MySQL® и MongoDB® - когда что лучше использовать? / Петр Зайцев (Percona)
 
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
 
Как смигрировать 50Пб в 32 без даунтайма? / Альберт Галимов, Андрей Сумин (Ma...
Как смигрировать 50Пб в 32 без даунтайма? / Альберт Галимов, Андрей Сумин (Ma...Как смигрировать 50Пб в 32 без даунтайма? / Альберт Галимов, Андрей Сумин (Ma...
Как смигрировать 50Пб в 32 без даунтайма? / Альберт Галимов, Андрей Сумин (Ma...
 
Новые возможности полнотекстового поиска в PostgreSQL / Олег Бартунов (Postgr...
Новые возможности полнотекстового поиска в PostgreSQL / Олег Бартунов (Postgr...Новые возможности полнотекстового поиска в PostgreSQL / Олег Бартунов (Postgr...
Новые возможности полнотекстового поиска в PostgreSQL / Олег Бартунов (Postgr...
 
Archival Disc на смену Blu-ray: построение архивного хранилища на оптических ...
Archival Disc на смену Blu-ray: построение архивного хранилища на оптических ...Archival Disc на смену Blu-ray: построение архивного хранилища на оптических ...
Archival Disc на смену Blu-ray: построение архивного хранилища на оптических ...
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
 
Архитектура Яндекс.Маркета вчера и сегодня — Юрий Манушкин, Роман Гершкович
Архитектура Яндекс.Маркета вчера и сегодня — Юрий Манушкин, Роман ГершковичАрхитектура Яндекс.Маркета вчера и сегодня — Юрий Манушкин, Роман Гершкович
Архитектура Яндекс.Маркета вчера и сегодня — Юрий Манушкин, Роман Гершкович
 
ClickHouse Intro
ClickHouse IntroClickHouse Intro
ClickHouse Intro
 
Cassandra @ Yahoo Japan (Satoshi Konno, Yahoo) | Cassandra Summit 2016
Cassandra @ Yahoo Japan (Satoshi Konno, Yahoo) | Cassandra Summit 2016Cassandra @ Yahoo Japan (Satoshi Konno, Yahoo) | Cassandra Summit 2016
Cassandra @ Yahoo Japan (Satoshi Konno, Yahoo) | Cassandra Summit 2016
 
Apache Kylin Extreme OLAP Engine for Big Data
Apache Kylin Extreme OLAP Engine for Big DataApache Kylin Extreme OLAP Engine for Big Data
Apache Kylin Extreme OLAP Engine for Big Data
 
Realtime Data Pipeline with Spark Streaming and Cassandra with Mesos (Rahul K...
Realtime Data Pipeline with Spark Streaming and Cassandra with Mesos (Rahul K...Realtime Data Pipeline with Spark Streaming and Cassandra with Mesos (Rahul K...
Realtime Data Pipeline with Spark Streaming and Cassandra with Mesos (Rahul K...
 
Apache Kylin Introduction
Apache Kylin IntroductionApache Kylin Introduction
Apache Kylin Introduction
 
Cloud Spanner
Cloud SpannerCloud Spanner
Cloud Spanner
 
Non-Relational Postgres / Bruce Momjian (EnterpriseDB)
Non-Relational Postgres / Bruce Momjian (EnterpriseDB)Non-Relational Postgres / Bruce Momjian (EnterpriseDB)
Non-Relational Postgres / Bruce Momjian (EnterpriseDB)
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
 
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
 
Peeking into the Black Hole Called PL/PGSQL - the New PL Profiler / Jan Wieck...
Peeking into the Black Hole Called PL/PGSQL - the New PL Profiler / Jan Wieck...Peeking into the Black Hole Called PL/PGSQL - the New PL Profiler / Jan Wieck...
Peeking into the Black Hole Called PL/PGSQL - the New PL Profiler / Jan Wieck...
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
 
Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулов...
Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулов...Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулов...
Архитектура и алгоритмы для индексации всей музыки ВКонтакте / Алексей Акулов...
 

Similar to Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)

Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
Ontico
 
Cистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruCистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ru
odnoklassniki.ru
 
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus Ready
HighLoad2009
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Badoo Development
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresql
Oleg Churkin
 
Александр Шарак, "Одноклассники"
Александр Шарак, "Одноклассники"Александр Шарак, "Одноклассники"
Александр Шарак, "Одноклассники"
Ontico
 
BigData Week Moscow 2013 - Case: Personalization
BigData Week Moscow 2013 - Case: PersonalizationBigData Week Moscow 2013 - Case: Personalization
BigData Week Moscow 2013 - Case: Personalization
Anton Gorokhov
 
Big Data - первые шаги
Big Data - первые шагиBig Data - первые шаги
Big Data - первые шаги
Anton Gorokhov
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Oleg Tsarev
 
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10  популярных вопросов администраторам баз данных или почему я против св...Top-10  популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Ilya Kosmodemiansky
 

Similar to Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet) (20)

Реляционные базы данных
Реляционные базы данныхРеляционные базы данных
Реляционные базы данных
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
 
Cистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruCистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ru
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
 
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus Ready
 
2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure2014-11-01 03 Николай Линкер. Open your clojure
2014-11-01 03 Николай Линкер. Open your clojure
 
HighLoad systems: tips & tricks
HighLoad systems: tips & tricksHighLoad systems: tips & tricks
HighLoad systems: tips & tricks
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
 
django-and-postgresql
django-and-postgresqldjango-and-postgresql
django-and-postgresql
 
Александр Шарак, "Одноклассники"
Александр Шарак, "Одноклассники"Александр Шарак, "Одноклассники"
Александр Шарак, "Одноклассники"
 
MySQL Optimization. Russian
MySQL Optimization. RussianMySQL Optimization. Russian
MySQL Optimization. Russian
 
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
 
Моделирование для NoSQL БД
Моделирование для NoSQL БДМоделирование для NoSQL БД
Моделирование для NoSQL БД
 
BigData Week Moscow 2013 - Case: Personalization
BigData Week Moscow 2013 - Case: PersonalizationBigData Week Moscow 2013 - Case: Personalization
BigData Week Moscow 2013 - Case: Personalization
 
Big Data - первые шаги
Big Data - первые шагиBig Data - первые шаги
Big Data - первые шаги
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
 
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10  популярных вопросов администраторам баз данных или почему я против св...Top-10  популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...
 

More from Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Переезжаем на Yandex ClickHouse / Александр Зайцев (LifeStreet)

  • 2.
  • 3. О чем этот доклад
  • 4. О чем этот доклад
  • 5. О чем этот доклад
  • 6. О чем этот доклад
  • 7. LifeStreet • Компании 10+ лет, оптимизация рекламных кампаний и объявлений (ad exchange, ad server, RTB, DSP, DMP и пр XYZ) • Десятки миллионов $$ денег ежегодно • 10,000,000,000+ событий (фактов) в день • Десятки таблиц, сотни метрик • Внешние и внутренние пользователи, ML-алгоритмы и пр. • Надежная выверенная инфраструктура на Vertica c 2010 (HL++ 2012-2013)
  • 9.
  • 10.
  • 11.
  • 12.
  • 13. 16.06.16 16:23 Serge, CTO: Sasha - I am VERY interested in figuring out if this can work for us. On paper - it is ideal. Their use case (analytics) is the same as ours. Their example of heat-map (click data) is same as ours. That it is FOSS is ideal. Please make investigation a priority
  • 14. ClickHouse летом-осенью 2016 • 1-5 месяцев в открытом доступе • Внутренний проект -- первый внешний продукт с непонятными перспективами • Нет независимых инсталляций • Нет поддержки, роадмепа и прозрачности планов • Всего 3 разработчика • Много известных ограничений (а сколько неизвестных?) • Истории других только-что-open-source продуктов
  • 15. Менеджер: и на «это» заменить продакшн?
  • 16. В ClickHouse нет: • Транзакций • Констрейнтов • Consistency • UPDATE/DELETE • NULLs • Миллисекунд • Implicit type conversions • Нормального SQL • Произвольного партиционирования • Средств управления кластером
  • 18.
  • 19. Что нас убедило попробовать • Близкая предметная область и задача • Авторитет Яндекса • Активный интерес сообщества • Просто интересно!
  • 20. Результаты пилотного проекта • Работает! • Быстро! (не хуже Вертики) • Много «особенностей» • Неплохая документация • Форум на googlegroups • Алексей Миловидов
  • 24. Две крайности Все в одной таблице фактов: • Дорого по диску • Дорого получить список • Нельзя ничего изменять Таблицы-измерения: • «Плохие» джойны • Нет update
  • 25. Схема. Измерения Статические справочники Изменяемые справочники Произвольные атрибуты
  • 26. Словари (external dictionaries) • Ключ -> (колонка -> значение) • Разные источники – файл, MySQL и др. • Описание в XML, можно 1 файл = 1 словарь • Обновляемо (см. дальше) • Доступ через функцию: dictGet<type>(’<dict_name>',’col_name>', <dict_key>)
  • 27. Ограничения словарей • Ключ – только UInt64 • Нет прямого способа получить все значения колонки • Ограничения по размеру • Нет обновления on demand или по изменению источника • Каждый узел кластера обновляется независимо • Может быть медленно
  • 28. Как получить значения create table dim_country (country_key Uint64) select dictGetString(‘dim_country’, ‘country_name’, country_key) from dim_country
  • 29. Оптимизация select sum(impressions) from very_big_table where dictGetString(‘dim_country’, ‘country_code’, country_key) =‘RU’ select sum(impressions) from very_big_table where country_key in (select country_key from dim_country where dictGetString(‘dim_country’,‘country_code’, country_key) =‘RU’)
  • 30. Обновление словарей • По таймеру • Много серверов – много коннектов • MySQL MyISAM • Touch конфига • Shared-файл
  • 31.
  • 32. Когда все же нужны таблицы? • Таблицы ключей для словарей • Атрибуты из веб-трафика • Джойны по сложному ключу: • Составной ключ • Effective Dates
  • 33. А если надо обновлять таблицу? Переписывать целиком или ReplacingMergeTree • Eventually заменяется • OPTIMIZE, FINAL • Неудобно обновлять отдельные поля • Разные партишены «не схлопываются»
  • 34. А если надо удалять?! • Из таблицы-измерения – никак • Из фактов -- CollapsingMergeTree • Грубый аналог «сторно»: +500 + (-500) = 0 • Eventually сторнируется • Исправить можно только метрики • Исправляются не данные, а результат агрегации
  • 40. ClickHouse FarmVille • Факты – distributed из многих шардов • Шарды – replicated • Таблицы-измерения – replicated на все узлы • Некоторые таблицы-измерения – согласовано с фактами
  • 41. Загрузка – старайтесь share nothing • Не надо грузить в DISTRIBUTED (режьте кроликов сами!) • REPLICATED контролирует чек-суммы • Временные/промежуточные таблицы
  • 42. Агрегация? • Яндекс считает, что не нужна • Aggregated/SummingMergeTree • MV поверх фактов 10
  • 43. Доступ к данным. Интересная специфика • Массивы и функции высших порядков для работы с ними, ARRAY JOIN • Переобозначения для select-выражений: • Удобно для условий в where/having: select sum(очень сложное выражение) a … having a>100; • Но легко сделать ошибку: select a b from (select 1 a, 2 b) where b=1; • ANY vs ALL JOIN • PREWHERE vs WHERE • GLOBAL IN, GLOBAL JOIN • Приблизительные вычисления
  • 44. А теперь: боль! • Нет авто-приведений типов • Нет алиазов таблиц • Свой синтаксис для JOIN с ограничениями: • Один (!) джойн на select • Джойн только через ‘using’ • Нет group by/order by 1,2,3…. • Нет nulls – нет coalesce() • Через JDBC/HTTP– нет временных таблиц
  • 45. Доступ к данным. Костыли • Явные преобразования типов, если не совпадают (словари!) dictGetString('dim_campaign','tag',toUInt64(cmp_key)) • «Обертки» для джойнов select *, a1, a2 /* заметьте, ‘*’ относится к основной таблице */ from (select *, b1, b2 from t any inner join b using (b_key) ) any inner join a using (a_key)
  • 46. Доступ к данным. Еще костыли coalesce(a, b, c, d) ~ arrayFilter(x -> x>0, [a, b, c, d])[1]
  • 48.
  • 49. Операционные процедуры • Все очень-очень гибко и очень-очень вручную • DDL на всех узлах: боль! • Zookeeper
  • 51. Залог успешного переезда • Разобраться в функциональности и ограничениях (куда едем) • Угадать The Yandex Way (по какой дороге) • Вступить на эту дорожку или мостить свою • Не стесняться пробовать и спрашивать дорогу • Не ругаться на Яндекс – они сделали отличный проект!
  • 52.

Editor's Notes

  1. Вопросы аудитории: Понравился ли доклад Виктора и Алексея про КХ? Кто-нибудь уже использует? А кто собирается? Ну вот для вас я и расскажу, что не все так сладко, как кажется
  2. Конечно, в КХ есть много всего другого