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…
Поисковый движок и аналитика по 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/
Приведение типов для таблиц типа 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: по позициям вместо имён
pointInEllipses
greatCircleDistance
Комбинатор -ForEach
groupArrayInsertAt
topK (beta)
ODBC драйвер - сборка и работоспособность под Windows
HTTPS сервер
system.parts - точное число строк
system.columns - разжатый размер
system.part_log
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
Распределённые DDL запросы
Движок таблиц Dictionary, движок баз данных Dictionary
Перезагрузка словарей с помощью заданного пользователем запроса за состоянием
SYSTEM запросы
Понятие сессии в HTTP интерфейсе
Ограничение на количество одновременных скачиваний с реплик
NULLs: исправить почти все оставшиеся недоработки
SELECT `db`.`table`.`column`
Произвольный ключ партиционирования для 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 (уже 668 участников)
GitHub: https://github.com/ClickHouse/ClickHouse/
+ встречи. Москва, Санкт-Петербург, Новосибирск,
Екатеринбург, Сан-Франциско... Далее: Киев, Минск...