Разработчик Yandex.
ClickHouse, — это столбцовая (колоночная) база данных.
Установка: Установка и использование ClickHouse на Linux
How to Install and Connect to ClickHouse Using Java
sudo apt install apt-transport-https ca-certificates dirmngr sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754 sudo echo "deb https://packages.clickhouse.com/deb stable main" > /etc/apt/sources.list.d/clickhouse.list sudo apt update sudo apt install clickhouse-server clickhouse-client
Конфигурация сервера : /etc/clickhouse-server/config.xml
После установки clickhouse мы можем подключиться к серверу без ввода логина и пароля под пользователем default. Для этого в консоли ввести команду:
clickhouse-client
или с удаленной машины:
clickhouse-client -h v
Команды
$ clickhouse-client -h v ClickHouse client version 18.16.1. Connecting to v:9000. Connected to ClickHouse server version 18.16.1 revision 54412. v.perm.ru :) SHOW DATABASES SHOW DATABASES ┌─name────┐ │ default │ │ system │ │ test_db │ └─────────┘ 3 rows in set. Elapsed: 0.007 sec.
Список баз с дополнительными сведениями:
SELECT name, data_path, engine FROM system.databases
SELECT
name,
data_path,
engine
FROM system.databases
┌─name────┬─data_path─────────────────────────┬─engine───┐
│ default │ /var/lib/clickhouse/data/default/ │ Ordinary │
│ system │ /var/lib/clickhouse/data/system/ │ Ordinary │
│ test_db │ /var/lib/clickhouse/data/test_db/ │ Ordinary │
└─────────┴───────────────────────────────────┴──────────┘
3 rows in set. Elapsed: 0.009 sec.
Список баз без служебных и системных:
SELECT name, data_path, engine FROM system.databases WHERE NOT match(name, '^__.*') ┌─name────┬─data_path─────────────────────────┬─engine───┐ │ default │ /var/lib/clickhouse/data/default/ │ Ordinary │ │ system │ /var/lib/clickhouse/data/system/ │ Ordinary │ │ test_db │ /var/lib/clickhouse/data/test_db/ │ Ordinary │ └─────────┴───────────────────────────────────┴──────────┘ 3 rows in set. Elapsed: 0.009 sec.
2. Работа с базами данных
Создание, удаление и редактирование баз.
CREATE DATABASE IF NOT EXISTS db_test_1
Удаление базы:
DROP DATABASE IF EXISTS db_test_1
3. Работа с таблицами
Список таблиц для базы:
SHOW TABLES FROM test_db
Создание таблицы:
USE test_db
create table address(n UInt32, street String, house String) ENGINE = MergeTree PRIMARY KEY(n) order by n;
Получение информации о таблице:
DESCRIBE TABLE test_db.address
┌─name───┬─type───┬─default_type─┬─default_expression─┬─comment_expression─┐
│ n │ UInt32 │ │ │ │
│ street │ String │ │ │ │
│ house │ String │ │ │ │
└────────┴────────┴──────────────┴────────────────────┴────────────────────┘
Вставка данных
INSERT INTO address (n, street, house) VALUES (1, 'Леонова', '7');
Получение данных
select * from address; ┌─n─┬─street──┬─house─┐ │ 1 │ Леонова │ 7 │ └───┴─────────┴───────┘ 1 rows in set. Elapsed: 0.006 sec.
Еще вставка данных: INSERT INTO address (n, street, house) VALUES (2, 'Комсомольский пр-т', '96а'), (3, 'Пушкина', '3'); Ограничения ClickHouse ClickHouse подходит не для всех задач. Она не рассчитана на частые изменения данных. Также она не поддерживает сложные транзакции, как это делают другие базы. Разберём ограничения подробнее. Ограниченная поддержка обновлений и удаления данных. ClickHouse не работает с командами UPDATE и DELETE так, как привычные базы данных. Такие операции выполняются через другие механизмы. Они менее гибкие и не совершаются мгновенно. Не предназначена для транзакционной нагрузки. В мире баз данных есть два основных типа работы: аналитическая (OLAP) и транзакционная (OLTP). OLTP — это когда система часто вносит изменения в данные, проверяет их на согласованность и обрабатывает запросы, где важны блокировки и точность каждой операции. Если важно, чтобы все изменения происходили строго по правилам, например в банковских переводах, то ClickHouse не подойдёт. Ограничения при объединении таблиц. В ClickHouse можно использовать JOIN — это операция, которая объединяет данные из нескольких таблиц. Но при работе с большими таблицами JOIN может сильно замедлить систему. Требует аккуратной настройки. Если данных становится много, важно правильно организовать структуру базы. Нужно продумать, как разбивать таблицы на части, как настраивать сжатие и партиции — деление таблицы в базе данных на части. Без этого ClickHouse может начать работать медленно или нестабильно. Удаление данных В ClickHouse для удаления данных есть несколько подходов — выбор зависит от задачи, объёма данных и требований к времени удаления.
1. DELETE FROM (легковесное удаление)
select * from address; DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr
Доступно только для таблиц семейства MergeTree.
2. ALTER TABLE ... DELETE (удаляющая мутация)
Пример:
select * from address; alter table test_db.address delete where n>0; alter table test_db.address delete where n=2;
Какой вариант выбрать?
- Если удаляете небольшой объём данных и допустимо, что они временно останутся на диске — берите DELETE FROM.
- Если нужно гарантированно и немедленно удалить большой объём или это требование compliance — используйте ALTER TABLE ... DELETE, но будьте готовы к нагрузке на систему.
- Если задача — очистить всю таблицу — однозначно TRUNCATE TABLE.
Может интегрироваться с ZooKeeper для балансировки.
Можно шардировать.
Метрики можно снимать с помощью Graphite.