ClickHouse meetup в Екатеринбурге

ClickHouse meetup в Екатеринбурге

ClickHouse: настоящее и будущее

Что такое ClickHouse?

ClickHouse - distributed analytical column-oriented DBMS

Почему column-oriented?

Так работают row-oriented системы:

Почему column-oriented?

Так работают column-oriented системы:

Почему ClickHouse?

Ничего готового не подошло.

Тогда мы сделали ClickHouse.

«Эволюция структур данных в Яндекс.Метрике»

https://habrahabr.ru/company/yandex/blog/273305/

Метрика 2.0

Коротко

Основной кластер Метрики

* Если вы хотите попробовать ClickHouse, достаточно и одного сервера.

ClickHouse в Яндексе

Нам удалось сделать систему сравнительно удобной.

С самого начала мы имели подробную документацию.

В течение пары лет ClickHouse распространился по другим отделам Яндекса.

Почта, Маркет, Директ, Вебмастер, AdFox, Инфраструктура, Бизнес аналитика...

Есть случаи, когда аналитики самостоятельно устанавливали ClickHouse на виртуальные машины и успешно использовали без каких-либо вопросов.

Open-source

Потом мы решили — ClickHouse слишком хорошая система, чтобы нам одним на нём сидеть.

Чтобы было веселее, надо подсадить на ClickHouse людей снаружи, пусть радуются. Решили сделать open-source.

Open-source

Лицензия Apache 2.0 — минимум ограничений.

Цель — максимальное распространение продукта.

Мы хотим, чтобы продуктом Яндекса пользовались по всему миру.

См. “Яндекс открывает ClickHouse”

https://habrahabr.ru/company/yandex/blog/303282/

Когда надо использовать ClickHouse

Хорошо структурированные, очищенные, неизменяемые события.

 

Click stream. Веб-аналитика. Рекламные сети. RTB. E-commerce.

Аналитика онлайн игр. Данные сенсоров и мониторингов. Телеком данные.

Финансовые транзакции. Биржевая аналитика.

Когда не надо использовать ClickHouse

OLTP
В ClickHouse нет UPDATE и полноценных транзакций.

Key-Value
Если нужны частые запросы на обновление по ключу, используйте другое решение.

Blob-store, document oriented
ClickHouse предназначен для большого количества мелко-гранулированных данных.

Излишне нормализованные данные
Лучше сделать широкую таблицу фактов.

Почему ClickHouse такой быстрый?

 

— от безысходности.

Яндекс.Метрика должна работать.

Почему ClickHouse такой быстрый?

Алгоритмическая оптимизация.

MergeTree, локальность расположения данных на диске
— быстрые диапазонные запросы.

Пример: функция uniqCombined состоит из комбинации трёх различных структур данных, подходящих под разные диапазоны кардинальностей.

Низкоуровневая оптимизация.

Пример: vectorized query execution.

Специализация и внимание к деталям.

Пример: у нас есть 17 разных алгоритмов выполнения GROUP BY. Для вашего запроса выбирается лучший.

Распространение ClickHouse

Сотни компаний в России и рядом
Яндекс, Mail.ru, Rambler, СКБ Контур…

Десятки компаний в Европе, США, Китае
Cloudflare, Wikimedia, Lifestreet…

Необычные примеры применения ClickHouse

Поисковый движок и аналитика по Bitcoin транзакциям:
https://blockchair.com/

"Крутятся довольно большие таблицы, используется только один сервер и всё работает ну очень быстро — при любых фильтрах и сортировке там всё почти мгновенно."

Биоинформатика - эволюционная генетика:
https://github.com/msestak/FindOrigin

"We are exploring evolution of novel genes in genomes because if seems that genomes are far from being static as previously believed and what actually happens is that new genes are constantly being added and old genes are lost."

Эксперимент LHCb в БАК:
https://www.yandex.com/company/press_center/press_releases/2012/2012-04-10/

Что нового в ClickHouse

Удобство работы

Приведение типов для таблиц типа Merge

Настройки input_format_allow_errors_*

Возможность создать более 16 словарей с ODBC источником

Подключение части конфигурации из ZK

OPTIMIZE DEDUPLICATE

ALTER первичного ключа: Enum, Date <-> UInt16, DateTime <-> UInt32

clickhouse --extract-from-config

Распределённые запросы

Отключение отстающих реплик

Отключение реплик, на которых нет таблицы

Оригинальный источник запроса в system.processes, system.query_log

Удобство INSERT SELECT

Приведение типов при INSERT SELECT

INSERT SELECT: по позициям вместо имён

GIS функции

pointInEllipses

greatCircleDistance

Агрегатные функции

Комбинатор -ForEach

groupArrayInsertAt

topK (beta)

Интерфейсы

ODBC драйвер - сборка и работоспособность под Windows

HTTPS сервер

Интроспекция

system.parts - точное число строк

system.columns - разжатый размер

system.part_log

NULLs (beta)

NULL для JOIN: настройка join_use_nulls

NULLS FIRST, LAST для ORDER BY

Пoддержка NULL в IN

Пoддержка NULL в функциях высшего порядка

if, multiIf, ifNull, nullIf, coalesce

toNullable, assumeNotNull

Поддержка Nullable типов в агрегатных функциях

NULL в качестве результата подзапроса, возвращающего пустоту

И ещё

ALTER ... DROP COLUMN ... FROM PARTITION

Настройка preferred_block_size_bytes

Возможность включить буферизацию результата в HTTP интерфейсе

Но это не всё

KILL QUERY
LIMIT BY
SELECT INTO OUTFILE
clickhouse-local
перекрёстная репликация
Функции кодирования UUID и MAC
Правильные HTTP коды ответа
Правильная логика для операций сравнения
Прогресс в HTTP заголовках
Исправление cache stampede
system.build_options, system.graphite
Трассировка распределённых запросов в system.processes, system.query_log
Возможность пропуска ошибок в текстовых форматах
Настройка fsync_metadata
timezone config parameter, функция timezone()
decodeURLComponent
Ускорение gzip в HTTP интерфейсе
max_table_size_to_drop
правильная сборка и пакеты
ускорение DISTINCT
Оптимизация Buffer таблиц
Оптимизация FixedString
Доработка RIGHT/FULL JOIN

Roadmap

Конец мая — начало июня 2017

Распределённые DDL запросы

Движок таблиц Dictionary, движок баз данных Dictionary

Перезагрузка словарей с помощью заданного пользователем запроса за состоянием

Июнь–июль 2017

SYSTEM запросы

Понятие сессии в HTTP интерфейсе

Ограничение на количество одновременных скачиваний с реплик

NULLs: исправить почти все оставшиеся недоработки

Июль 2017

SELECT `db`.`table`.`column`

Q3-Q4 2017

Произвольный ключ партиционирования для MergeTree

Возможность писать JOIN как в обычном SQL

Пулы ресурсов (CPU, disk IO, network bandwidth) для запросов

Q4-Q5 2017

Начальная поддержка UPDATE/DELETE

Сообщество

Сайт: https://clickhouse.yandex/

Google groups: https://groups.google.com/forum/#!forum/clickhouse

Рассылка: clickhouse-feedback@yandex-team.com

Telegram чат: https://telegram.me/clickhouse_en и https://telegram.me/clickhouse_ru (уже 668 участников)

GitHub: https://github.com/yandex/ClickHouse/

 

+ встречи. Москва, Санкт-Петербург, Новосибирск,
Екатеринбург, Сан-Франциско... Далее: Киев, Минск...

Пока всё