Size: a a a

ClickHouse не тормозит

2020 May 30

SC

Smoked Cheese in ClickHouse не тормозит
у кликхаус сервера к которому подключаешься есть внешний IP?
источник
2020 May 31

OA

Oleg A. 🇷🇺 in ClickHouse не тормозит
Через curl и через clickhouse cli в облаках над франкфуртом всё ок. Внешний адрес есть, работает.
У меня боль именно с DataGrip (Win/Mac)
Поэтому и спрашиваю, наверняка же кто-нибудь пользуется )
Как всегда какой-нибудь галочки не хватило )
источник

AN

Aleksey N in ClickHouse не тормозит
Dmitry Titov
@souz9 тут вашу ситуацию еще разок обсудили, и меня справедливо поправили на счет ключа партицирования.
Либо ключ выносить в отдельный столбик, что бы min_max работал(будет всего 1 значение в нем), тогда можно любую функцию натравливать
Либо использовать только такие функции. что не испортят min_max
тогда в продолжении обсуждения, уточню следующии моменты:

id у нас строковый. Даже более того, это будет hex. Т.е. если разбивать по substr(id,1,1), то получается 16 партиций, по множеству [0-9,a-f]. Разбиении при этом получается равномерное, проверенно.

> если у них вообще есть запросы по конкретным айди, что вопрос на самом деле

Да, это один их основных кейсов. Выглядит это примерно так. Есть условный список id на 10M элементов. И вот по нему нужно строить различную аналитику. Т.е. нам реально важна быстрая выборка по id.

Собственно по id у нас строиться primary key. Остальные поля в order by, но не для ускорения анализа, а именно для схлопывания записей в ReplacingMergeTree.

> у них похоже каждый айдишник будет присутствовать в почти каждом месяце, а нужен только последний, те умножение данных минимум в 12 раз, что неприятно

Именно так. При этом, держать x12 копий данных на дисках накладно по деньгам. И, часто нужно анализировать данные по id за всю его историю, а не только за условный месяц.

> ещё можно вставлять в новый и все старые месяцы с минусом в Collapsing

@dj_mixer Спасибо, итересное предложение. Если я правильно понял, то получается в данном случае, нам на каждую запись в бд, потребуется делать 12 записей (по одной в каждую из партиций)?

> Ну тогда это все упирается в вопрос, насколько они готовы пожертвовать местом

Думаю для нас, выгоднее раз в пару недель запустить на несколько часов optimize final по всем данным, нежели чем платить за x12 дискового пространства.
источник

D

Dj in ClickHouse не тормозит
Aleksey N
тогда в продолжении обсуждения, уточню следующии моменты:

id у нас строковый. Даже более того, это будет hex. Т.е. если разбивать по substr(id,1,1), то получается 16 партиций, по множеству [0-9,a-f]. Разбиении при этом получается равномерное, проверенно.

> если у них вообще есть запросы по конкретным айди, что вопрос на самом деле

Да, это один их основных кейсов. Выглядит это примерно так. Есть условный список id на 10M элементов. И вот по нему нужно строить различную аналитику. Т.е. нам реально важна быстрая выборка по id.

Собственно по id у нас строиться primary key. Остальные поля в order by, но не для ускорения анализа, а именно для схлопывания записей в ReplacingMergeTree.

> у них похоже каждый айдишник будет присутствовать в почти каждом месяце, а нужен только последний, те умножение данных минимум в 12 раз, что неприятно

Именно так. При этом, держать x12 копий данных на дисках накладно по деньгам. И, часто нужно анализировать данные по id за всю его историю, а не только за условный месяц.

> ещё можно вставлять в новый и все старые месяцы с минусом в Collapsing

@dj_mixer Спасибо, итересное предложение. Если я правильно понял, то получается в данном случае, нам на каждую запись в бд, потребуется делать 12 записей (по одной в каждую из партиций)?

> Ну тогда это все упирается в вопрос, насколько они готовы пожертвовать местом

Думаю для нас, выгоднее раз в пару недель запустить на несколько часов optimize final по всем данным, нежели чем платить за x12 дискового пространства.
Ну 12 - это вырожденный случай. Какой процент записей у вас обновляется каждыц месяц?  Если запись в среднем обновляется три раза в год - это уже 4. Так же надо прикинуть процент записей которые умирают каждый месяц. Несколько часов это тоже assumption так себе.
Если не хотите в месяцы - порекомендовал бы более гранулярно побить по id (например 500-1000 партиций).
При постоянной вставке и использовании вам придется делать final на каждом запросе...
источник

AN

Aleksey N in ClickHouse не тормозит
Мы таких замеров не делали. Однако исходя из специфики данных, думаю за месяц обновляются данные по 60-80% идентификаторов
источник

AN

Aleksey N in ClickHouse не тормозит
А можно подробнее про выбор количества партиций. Собственно изначально вопрос был почему не использовать одну партицию? Решили что десяток будет лучше и достаточно, чтобы не резервировать много свободного места под процессинг очень больших файлов. Почему стоит использовать 500-1000 партиций?
источник

D

Dj in ClickHouse не тормозит
Aleksey N
А можно подробнее про выбор количества партиций. Собственно изначально вопрос был почему не использовать одну партицию? Решили что десяток будет лучше и достаточно, чтобы не резервировать много свободного места под процессинг очень больших файлов. Почему стоит использовать 500-1000 партиций?
ну судя по описанию, что большинство запросов - к индивидуальному ID. В этом случае partitioning - то что доктор прописал. чем сильнее бьете - тем меньше будет сканировать кажлый запрос, тем быстрее будет отрабатывать optimize-final (так как объемы данных меньше)...
а в целом, кончено зависит от большого числа факторов - лучше выводить из железа и уникальных ID ожидаемых в партишне, запросов, итд
источник

D

Dj in ClickHouse не тормозит
можно обойтись одним партишном и ключем по ID, тоже рабочий вариант
источник

DT

Dmitry Titov in ClickHouse не тормозит
>Почему стоит использовать 500-1000 партиций?
не стоит использовать, потому что это будет 1000+ партов и несколько тысяч файлов
Это будет замедлять старт кликхауса и тд
источник

DT

Dmitry Titov in ClickHouse не тормозит
partition pruning и сканирование ключа обе достаточно легкие операции. так что не стоит злоупотреблять первой
источник

D

Dmitry in ClickHouse не тормозит
Dj
1. Orderby да., старые данные останутся как были https://clickhouse.tech/docs/en/sql-reference/statements/alter/#manipulations-with-key-expressions
Но оно не всегда срабатывало, раньше.
Partition key - нет
2. Merge engine попробуйте, пользователи могут ходить в одно и тоже, а вы подставлять что вам нужно.

3. Insert select?
https://clickhouse.tech/docs/en/operations/settings/settings/#settings-max-insert-threads
На новых версиях
Ох, спасибо большое! Очень полезная информация!
источник

D

Dj in ClickHouse не тормозит
Dmitry Titov
>Почему стоит использовать 500-1000 партиций?
не стоит использовать, потому что это будет 1000+ партов и несколько тысяч файлов
Это будет замедлять старт кликхауса и тд
говорю поэтому, зависит от объемов. Если парт весит 1ГБ или 1 ТБ - это две большие разницы, особенно если ресурс IO bound. (например делать OPTIMIZE FINAL)
так же 1000 партиций вполне нормально будут стартовать (уложится старт в 0.5с или в 4 с) - имхо не так критично,..
но опять, дьявол в деталях
источник

DT

Dmitry Titov in ClickHouse не тормозит
Dj
говорю поэтому, зависит от объемов. Если парт весит 1ГБ или 1 ТБ - это две большие разницы, особенно если ресурс IO bound. (например делать OPTIMIZE FINAL)
так же 1000 партиций вполне нормально будут стартовать (уложится старт в 0.5с или в 4 с) - имхо не так критично,..
но опять, дьявол в деталях
еще проблема с 1000 партициями. что манипулирование ими только через скрипты
источник

D

Dj in ClickHouse не тормозит
Dmitry Titov
еще проблема с 1000 партициями. что манипулирование ими только через скрипты
не понял, о каком манипулировании идет речь?
источник

DT

Dmitry Titov in ClickHouse не тормозит
Dj
не понял, о каком манипулировании идет речь?
ALTER TABLE ATTACH/DETACH/FETCH PARTITION BY (bla-bla)
источник

D

Dj in ClickHouse не тормозит
а, ну это если их 10 тоже лучше через скрипты ) или генерить экселем...
источник

DT

Dmitry Titov in ClickHouse не тормозит
Dj
а, ну это если их 10 тоже лучше через скрипты ) или генерить экселем...
лучше != что удобнее:)
источник

D

Dj in ClickHouse не тормозит
опять таки, имхо опираться стоит на то как происходит заливка (вживую или раз в день, неделю)
как часто запросы идут, и как часто optimize final.
источник

DT

Dmitry Titov in ClickHouse не тормозит
Ну я лично не стал бы рисковать с таким дроблением таблицы, но это имхо
источник

D

Dj in ClickHouse не тормозит
судя по тому что optimize final раз в 2 недели, это вообще что-то очень не критичное, поэтому можно и в одном партишне сидеть...
источник