Size: a a a

ClickHouse не тормозит

2020 August 30

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Maxim Bogdanov
Подскажите по джойнам. Как я понял, джойн — очень дорогая операция, так как CH грузит все данные в память и ещё создаёт дополнитнльную таблицу. То есть если я хочу сджойнить 1тб, то сделать это не удастся. А почему CH не делает простой в реализации merge join? Который можно сделать потоково практически без потребления памяти на любом объёме данных. При условии, что две таблицы отсортированы по одному и тому же ключу.
тупо пока еще не сделали. И похоже Яндексу самим это не актуально вообще.
источник

M

Maxim Bogdanov in ClickHouse не тормозит
Очень жаль 😕
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Telegram
Artem Zuikov in ClickHouse не тормозит
в двух словах. hash join хорошо ложится на пайплайн CH поэтому в части join-а там все параллелится примерно так же хорошо, как для обычных запросов. в части построения хэш-таблицы - можно улучшить, если сделать лок-фри хэш таблицу (сейчас там mutex на вставке). merge join-ы вписываются в пайплайн сильно хуже, но там можно и нужно прокинуть инфу о сортировке из таблиц (и возможно где-то начнет обгонять hash join, когда умещаемся в память - не сильно приоритетно), join на диске вписывается очень плохо и сильно тормозит. сейчас join на диске есть только для merge join-а. в этом месте планируется сделать grace hash join (это двухуровневый hash join со скидыванием бакетов на диск) - должно работать сильно лучше текущего join-а на диске. На многопоточность это все почти никак не влияет. Основная проблема join-а на диске не гонять данные с диска в память и обратно (и  не блокироваться на ожидании этих данных).

помимо этого есть еще несколько оптимизаций про join-ы вообще, независимо от алгоритма. Там тоже не про многопоточность…
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
merge join-ы вписываются в пайплайн сильно хуже
источник

M

Maxim Bogdanov in ClickHouse не тормозит
Нуу, у Вертики то как-то получилось сделать почти риалтайм мердж-джойны 🙂 Ещё в 2015 году помню удивлялся, как они могут быть такими быстрыми.
источник

M

Maxim Bogdanov in ClickHouse не тормозит
мб конечно и правда особенности пайплайна, я не знаю деталей
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
wondering а каким образом у вас получились две таблицы отсортированные одинаково? Что за задача была?
источник

M

Maxim Bogdanov in ClickHouse не тормозит
так я ту же таблицу и джойнил 🙂 Задача была - надо было сджойнить два действия пользователя, одно за другим и сделать воронку. Ну а в кликхаусе я думал сджойнить таблицу юзеров и их действий. И там и там PK - это userID.
источник

l

lnuynxa in ClickHouse не тормозит
В клике ты же не джойнишь таблицу саму на себя?
источник

M

Maxim Bogdanov in ClickHouse не тормозит
lnuynxa
В клике ты же не джойнишь таблицу саму на себя?
Я попробовал сджойнить таблицу в 6млн записей и CH съел всю память ноута. В итоге начал писать свою БД в отсутствии каких-бы то нибыло альтернатив на рынке (платных и бесплатных). Пока что выходит быстрее CH во всех нужных мне фичах (sequence match, merge join). Но периодически возвращаюсь к CH и приглядываюсь, так как свою бд мне ещё где-то год писать, а хотелось бы найти уже готовое решенрие.
источник

l

lnuynxa in ClickHouse не тормозит
Maxim Bogdanov
Я попробовал сджойнить таблицу в 6млн записей и CH съел всю память ноута. В итоге начал писать свою БД в отсутствии каких-бы то нибыло альтернатив на рынке (платных и бесплатных). Пока что выходит быстрее CH во всех нужных мне фичах (sequence match, merge join). Но периодически возвращаюсь к CH и приглядываюсь, так как свою бд мне ещё где-то год писать, а хотелось бы найти уже готовое решенрие.
6 лям, звучит не много сколько оперативной памяти то?
источник

M

Maxim Bogdanov in ClickHouse не тормозит
lnuynxa
6 лям, звучит не много сколько оперативной памяти то?
16 гб. Свободной может было 4-6гб
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
ну так в КХ не нужен такой merge join, теперь можно стримить group by userID/ groupArray и делать это без join
источник

M

Maxim Bogdanov in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
ну так в КХ не нужен такой merge join, теперь можно стримить group by userID/ groupArray и делать это без join
А можно подробнее? Вот я сгруппировал одну таблицу по userID, окей, сгруппировал вторую по userID. А как их объединить? На стороне клиента?
источник

M

Maxim Bogdanov in ClickHouse не тормозит
или подзапросами
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Maxim Bogdanov
А можно подробнее? Вот я сгруппировал одну таблицу по userID, окей, сгруппировал вторую по userID. А как их объединить? На стороне клиента?
а нет, я про воронки и одну таблицу
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
а вместо join-в таблицы ивентов с таблицей юзеров, теперь ssd dictionary
источник

M

Maxim Bogdanov in ClickHouse не тормозит
> а нет, я про воронки и одну таблицу

Аа. Ну, спорно. На самом деле там функционал нужен намного сложнее, достаточно почитать, что умеют в этом плане mixpanel.com и amplitude.com Там либо своя БД либо snowflake/bigquery
Я видел презентацию и сравнение sequenceMatch и group/array, мне показалось, что бд слишком универсальна, чтобы такие штуки делать, выходит очень громоздкий синтаксис.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
насколько я понимаю на сотнях миллионов юзеров и миллиардах ивентов воронки можно сделать только до заливки в dwh
источник

M

Maxim Bogdanov in ClickHouse не тормозит
На миллиардах ивентов да, это займёт время. Обычно юзается сэмплинг.
источник