184 похожих чатов

Добрый день! Вопрос по оптимальному применению clickhouse Есть проект, данные с

определённой периодичностью добавляются, а так же изменяются (сортировка по категориям, рассчёты на основе сырых данных), так же выполняются большие SELECT запросы для построения отчётов . Сейчас хранение данных организованно на PostgreSQL, но с увеличением количества данных увеличилось и время обработки 1 запроса.

При поиске более быстрого решения выбор пал на clickhouse(причина выбора в названии чата собственно описана очень лаконично). Но однако, встал вопрос обновления данных, насколько я понял привычного обновления данных в clickhouse нет, и прочтя доки пришёл к выводу, что есть 2 пути:
1. VersionedCollapsingMergeTree (изменения состояний объекта)
Эта штука подходит для точечного изменения и имеет недостаток в том что при построении запросов для сбора статистики надо будет указывать фильтры чтобы туда не попал левый sign
2. мутации ALTER UPDATE
Эта штука вроде как могёт в обновлении пачками, но во первых пугает вот эта строчка из документации: "Но после применения первой мутации формат данных таблицы становится несовместимым с предыдущими версиями и откатиться на предыдущую версию уже не получится." и вот этот "При этом атомарности нет — куски заменяются на помутированные по мере выполнения и запрос SELECT, заданный во время выполнения мутации, увидит данные как из измененных кусков, так и из кусков, которые еще не были изменены."


Собственно вопросы:
1. Правильно ли я всё понял и это действительно только 2 возможных варианта обновления?
2. Если я не прав, то какие есть варианты помимо?

17 ответов

15 просмотров

даже не пробуйте второй вариант, убьете диски и не получите что хотите CollapsingMergeTree + SELECT ... FINAL вполне себе работает

1. Ещё есть ReplacingMergeTree если удалять не надо, только обновлять

Михаил-Явруян Автор вопроса
Slach [altinity]
даже не пробуйте второй вариант, убьете диски и не...

Даже если есть потребность обновлять данные не точечно, а пачками?

Михаил-Явруян Автор вопроса
Ivan Kalinin
1. Ещё есть ReplacingMergeTree если удалять не над...

А можно подробнее как именно обновлять записи используя этот движок?

Михаил Явруян
Даже если есть потребность обновлять данные не точ...

CollapsingMergeTree в целом пофигу сколько вы обновляете на самом деле вы просто пишете UPDATE как DELETE (sign -1 / old values) + INSERT (sign +1 new values) и дальше всю работу делает SELECT ... FINAL и background merges когда данные из двух кусков сливаются. то что имеет одинаковые значения ORDER BY ... но разные sign -1и +1 просто схлапывается и не пишется в новый кусок..

Михаил Явруян
А можно подробнее как именно обновлять записи испо...

Точно так же как VersionedCollapsing, только sign не надо. По ключу сортировки + поле с версией

Михаил-Явруян Автор вопроса
Slach [altinity]
CollapsingMergeTree в целом пофигу сколько вы обно...

Это примерно понятно, при обновлении получается так, что я запишу ещё раз страую версию строки, и новую. Но при этом старой версии дам sign -1 и когда нибудь оно схлопнется с новой.

Роман Болдырев
А почему может быть проблема с дисками?

потому что мутация полностью переписывает выбранные парты применяя к ним мутацию....

Slach [altinity]
потому что мутация полностью переписывает выбранны...

Все это читал, но все равно не очевидно при чем здесь ресурс дисков?

Роман Болдырев
Все это читал, но все равно не очевидно при чем зд...

ну посчитайте у вас два парта по 10 гигайбайт вам нужно применить миграцию вам нужно прочитать 2*10 гигабайт и потом записать 2*10 гигабайт итого 40 гигов i/o ок. теперь посчитайте что вам надо это сделать 100 раз в секунду (ну или как вы там собрались часто мутации запускать) короче мутации не выход поймите что у clickhouse eventual consistency by design и в соответсвии с этим действуйте

Slach [altinity]
ну посчитайте у вас два парта по 10 гигайбайт вам ...

Я вас понял, примерно так и предполагал, но хотел услышать точный ответ - 100 раз в секунду по 20Гб конечно не вариант), но если проводить мутации по расписанию раз в 10минут\час\день, и например изменения затрагивают не все парты, то возможно этот подход будет работать?

Роман Болдырев
Я вас понял, примерно так и предполагал, но хотел ...

будет. как вам уже сказали, но в момент SELECT, часть партов изменена, часть нет... получаете то что получаете... materialized view + aggregatedmergetree или projection будет быстрее

Slach [altinity]
будет. как вам уже сказали, но в момент SELECT, ча...

Я просто сейчас пробую схему с мутациями, при этом новым данным, до проведения мутации я ставлю признак что они еще не актуальны. В процессе мутации признак изменяю на актуальный, а старые записи помечаю на удаление. Промежуток мутаций не чаще чем раз в 10-30 минут, и в любой момент времени данные консистентны - поскольку новые хоть и записаны, но до обработки в запросах не фигурируют, а старые данные пока не переведены на удаление.

Роман Болдырев
Я просто сейчас пробую схему с мутациями, при этом...

ну посмотрите в system.part_log чтобы оценить сколько там читается и пишется по вашим мутациям

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
9
> Копаем глубже > Следующий момент был, когда я спросил его, знает ли он JavaScript. Он ответил, что его учили работать с C#. Я тоже в университете писал на C#, но даже там мн...
Oleg Volkov
4
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
8
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Карта сайта