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, Vertamedia, Carto…

CloudFlare

How do we analyze over O(100B) DNS requests daily.

"ClickHouse enables us and our customers to explore the the dataset in real time to get operational insights. Due to many of the optimizations built into ClickHouse we are able to store the data for a long time allowing us to look events is perspective and at historical trends."

Wikimedia.org

"clickhouse is a columnar datastore that we are using as an aid to run complex SQL queries on the edit data "lake" that we have as a result of the edit reconstruction project. It is similar to Druid but faster for complex queries."

Необычные примеры применения 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 vs. Spark & MariaDB Column Store

https://www.percona.com/blog/2017/02/13/clickhouse-new-opensource-columnar-database/

Независимые бенчмарки

ClickHouse vs. Redshift

https://www.altinity.com/blog/2017/6/20/clickhouse-vs-redshift

Интерфейсы

HTTP REST

clickhouse-client

JDBC (production), ODBC (beta)

 

Python, PHP, Perl, Go,
Node.js, Ruby, C++, .NET, Scala, R, Julia, Rust

Интеграции с системами визуализации данных

Tabix (tabix.io) — разработан специально для ClickHouse.

И ещё:

Grafana, Redash, Apache Zeppelin,
Superset, Power BI…

Что нового в ClickHouse

Удобство работы и совместимость с SQL

Поддежка сессий в HTTP интерфейсе:

curl 'http://host:port/?session_id=123&session_timeout=60' \
-d 'CREATE TEMPORARY TABLE t'

Алиасы таблиц
Квалифицированные имена столбцов в запросах:

SELECT t.column FROM table AS t

Квотированные идентификаторы в соответствии с ANSI SQL:

SELECT "column" FROM "db"."table"

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

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

Настройки input_format_allow_errors_*

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

OPTIMIZE TABLE ... PARTITION ... DEDUPLICATE

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

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

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

CREATE TABLE table ON CLUSTER cluster ...

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

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

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

Словари

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

CREATE DATABASE dictionaries ENGINE = Dictionary

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

IP Trie словари

Удобство INSERT SELECT

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

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

GIS функции

pointInEllipses

greatCircleDistance

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

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

groupArrayInsertAt

topK (beta)

Интерфейсы

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

HTTPS сервер

NULLs (beta gamma)

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 ... CLEAR COLUMN ... IN PARTITION

Настройка preferred_block_size_bytes

Но это не всё

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
clickhouse --extract-from-config
system.parts - точное число строк
system.columns - разжатый размер
system.part_log

Roadmap

Июль 2017

SYSTEM запросы

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

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

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 (уже 778 участников)

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

 

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

Спасибо!