ClickHouse - distributed analytical column-oriented DBMS
Так работают row-oriented системы:
Так работают column-oriented системы:
Ничего готового не подошло.
Тогда мы сделали ClickHouse.
«Эволюция структур данных в Яндекс.Метрике»
* Если вы хотите попробовать ClickHouse, достаточно и одного сервера.
Нам удалось сделать систему сравнительно удобной.
С самого начала мы имели подробную документацию.
В течение пары лет ClickHouse распространился по другим отделам Яндекса.
Почта, Маркет, Директ, Вебмастер, AdFox, Инфраструктура, Бизнес аналитика...
Есть случаи, когда аналитики самостоятельно устанавливали ClickHouse на виртуальные машины и успешно использовали без каких-либо вопросов.
Потом мы решили — ClickHouse слишком хорошая система, чтобы нам одним на нём сидеть.
Чтобы было веселее, надо подсадить на ClickHouse людей снаружи, пусть радуются. Решили сделать open-source.
Лицензия Apache 2.0 — минимум ограничений.
Цель — максимальное распространение продукта.
Мы хотим, чтобы продуктом Яндекса пользовались по всему миру.
См. “Яндекс открывает ClickHouse”
Хорошо структурированные, очищенные, неизменяемые события.
Click stream. Веб-аналитика. Рекламные сети. RTB. E-commerce.
Аналитика онлайн игр. Данные сенсоров и мониторингов. Телеком данные.
Финансовые транзакции. Биржевая аналитика.
OLTP
В ClickHouse нет UPDATE и полноценных транзакций.
Key-Value
Если нужны частые запросы на обновление по ключу, используйте другое решение.
Blob-store, document oriented
ClickHouse предназначен для большого количества мелко-гранулированных данных.
Излишне нормализованные данные
Лучше сделать широкую таблицу фактов.
— от безысходности.
Яндекс.Метрика должна работать.
Алгоритмическая оптимизация.
MergeTree, локальность расположения данных на диске
— быстрые диапазонные запросы.
Пример: функция uniqCombined состоит из комбинации трёх различных структур данных, подходящих под разные диапазоны кардинальностей.
Низкоуровневая оптимизация.
Пример: vectorized query execution.
Специализация и внимание к деталям.
Пример: у нас есть 17 разных алгоритмов выполнения GROUP BY. Для вашего запроса выбирается лучший.
Сотни компаний в России и рядом
Яндекс, Mail.ru, Rambler, СКБ Контур…
Десятки компаний в Европе, США, Китае
Cloudflare, Wikimedia, Lifestreet, Vertamedia, Carto…
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."
"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."
Поисковый движок и аналитика по 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…
Поддежка сессий в 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: по позициям вместо имён
pointInEllipses
greatCircleDistance
Комбинатор -ForEach
groupArrayInsertAt
topK (beta)
ODBC драйвер — сборка и работоспособность под Windows
HTTPS сервер
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
SYSTEM запросы
Ограничение на количество одновременных скачиваний с реплик
NULLs: исправить почти все оставшиеся недоработки
Произвольный ключ партиционирования для MergeTree
Возможность писать JOIN как в обычном SQL
Пулы ресурсов (CPU, disk IO, network bandwidth) для запросов
Начальная поддержка UPDATE/DELETE
Сайт: https://clickhouse.com/
Google groups: https://groups.google.com/forum/#!forum/clickhouse
Рассылка: [email protected]
Telegram чат: https://telegram.me/clickhouse_en и https://telegram.me/clickhouse_ru (уже 778 участников)
GitHub: https://github.com/ClickHouse/ClickHouse/
+ встречи. Москва, Санкт-Петербург, Новосибирск, Сан-Франциско
Екатеринбург, Минск... Далее: Нижний Новгород, Казань, Берлин