Size: a a a

ClickHouse не тормозит

2020 May 27

E

Eugene in ClickHouse не тормозит
Dj
а можно не трогать оригинальный файл, и положить нужную секцию в папочку config.d в кастомный файл...  =)
Ну начинается xD
источник

A

Andrey in ClickHouse не тормозит
Добежал merge. Вот что есть:

До OPTIMIZE FINAL: 202002 | 21.16 GiB
После OPTIMIZE FINAL: 202002 | 31.88 GiB

сейчас попробую с добавить zstd столбец
источник

M

Maxim Bogdanov in ClickHouse не тормозит
Подскажите, насколько эффективно может быть ReplacingMergeTree для хранения актуальных состояний профайлов пользователей? Допустим, у меня есть обычный MergeTree, где действия пользователей  кладутся классически, один за другим. А есть сами пользователи - ФИО, емейл, пол, возраст. Иногда эти параметры меняются. Так вот я хочу заюзать ReplacingMergeTree для хранения этих пользователей, их последних состояний. Пользователей предполагается много (допустим, десятки миллионов). Ну и вторая задача - джойнить пользователей с их действиями. Как по вашему, будет ли такое работать в кликхаусе?
источник

D

Dj in ClickHouse не тормозит
Andrey
Добежал merge. Вот что есть:

До OPTIMIZE FINAL: 202002 | 21.16 GiB
После OPTIMIZE FINAL: 202002 | 31.88 GiB

сейчас попробую с добавить zstd столбец
а старый бин файл есть где нить? сделайте
xxd stock_datetime.bin |head


на 16 байте будет метод компрессии указан
источник

A

Andrey in ClickHouse не тормозит
Dj
а старый бин файл есть где нить? сделайте
xxd stock_datetime.bin |head


на 16 байте будет метод компрессии указан
00000010: 820f

и в старом и в новом файлах, LZ4
источник

E

Eugene in ClickHouse не тормозит
Maxim Bogdanov
Подскажите, насколько эффективно может быть ReplacingMergeTree для хранения актуальных состояний профайлов пользователей? Допустим, у меня есть обычный MergeTree, где действия пользователей  кладутся классически, один за другим. А есть сами пользователи - ФИО, емейл, пол, возраст. Иногда эти параметры меняются. Так вот я хочу заюзать ReplacingMergeTree для хранения этих пользователей, их последних состояний. Пользователей предполагается много (допустим, десятки миллионов). Ну и вторая задача - джойнить пользователей с их действиями. Как по вашему, будет ли такое работать в кликхаусе?
Джойн заменить на работу с внешними справочниками и работать это будет.
Первое тоже будет, только надо понимать, что оно в фоне делает слияния и не сразу
источник

M

Maxim Bogdanov in ClickHouse не тормозит
Eugene
Джойн заменить на работу с внешними справочниками и работать это будет.
Первое тоже будет, только надо понимать, что оно в фоне делает слияния и не сразу
Слияния не сразу - это не проблема, мне не нужен риалтайм. Обновится юзер через минуту - не страшно. Отчёт подождёт. А вот внешний справочник - но ведь объёмы малость большие, ожидается десятки миллионов пользователей. Мне кажестя, что кликхаус со внешним источником малость призадумается при джойне его с таблицей ивентов, там же по идее нельзя будет делать hash join, а только map reduce какой-то. Хотя я не знаю внутренностей кликхауса, но мне казалось, что внешний источник - это чисто для словарей типа список стран подключить, список городов - как максимум.
источник

D

Dj in ClickHouse не тормозит
Andrey
00000010: 820f

и в старом и в новом файлах, LZ4
clickhouse-compressor --stat < stock_datetime.bin | head


и сравнить начальные блоки на старых и новых партах... может там какая магия
можете сюда писать, он просто напечатает несжатый и сжатый размеры
источник

M

Maxim Bogdanov in ClickHouse не тормозит
Maxim Bogdanov
Слияния не сразу - это не проблема, мне не нужен риалтайм. Обновится юзер через минуту - не страшно. Отчёт подождёт. А вот внешний справочник - но ведь объёмы малость большие, ожидается десятки миллионов пользователей. Мне кажестя, что кликхаус со внешним источником малость призадумается при джойне его с таблицей ивентов, там же по идее нельзя будет делать hash join, а только map reduce какой-то. Хотя я не знаю внутренностей кликхауса, но мне казалось, что внешний источник - это чисто для словарей типа список стран подключить, список городов - как максимум.
Плюс мне нужно делать запросы в обе стороны. Скажем, выгрести все ивенты всех пользователей мужского пола - я же буду начинать выборку с таблицы профилей и далее уже джойнить ивенты. Или же наоборот - хочу выгрести всех пользователей, которые совершили действие AddToCart. Тут уже наоборот джойн пойдёт. А ещё круче - сделать запрос всех пользователей мужского пола, сделавших действие AddToCart. Такие дела 🙂
источник

M

Maxim Bogdanov in ClickHouse не тормозит
Я думал в каждом действии хранить все данные пользователя, но не думаю, что это будет рационально. Плюс если у пользователя поменяется, допустим, пол (ну, бывает). то я не смогу уже сделать однозначно запрос, тк половина действий будет с одним полом, половина - с другим.
источник

E

Eugene in ClickHouse не тормозит
Maxim Bogdanov
Плюс мне нужно делать запросы в обе стороны. Скажем, выгрести все ивенты всех пользователей мужского пола - я же буду начинать выборку с таблицы профилей и далее уже джойнить ивенты. Или же наоборот - хочу выгрести всех пользователей, которые совершили действие AddToCart. Тут уже наоборот джойн пойдёт. А ещё круче - сделать запрос всех пользователей мужского пола, сделавших действие AddToCart. Такие дела 🙂
А вы это руками делаете или в какой-то bi системе типа datalens?
источник

M

Maxim Bogdanov in ClickHouse не тормозит
Eugene
А вы это руками делаете или в какой-то bi системе типа datalens?
Я это буду делать руками (кодом), и хочется максимально завязаться на одной БД. Ну то есть ок, есть у меня две бд - одна колоночная, кликхаус, другая классичемкая OLTP для профилей. Вот я выгребаю профили по полу, выгреб 1млн id. Далее как мне их сджойнить с кликхаусом? Я же не смогу сделать SELECT * FROM events WHERE user_id IN(1,….,1000000 миллион ид) Это надо писать свой распределенный мэп-редьюсер, выходит 🙂 Спарк или что там ещё.
источник

A

Andrey in ClickHouse не тормозит
Dj
clickhouse-compressor --stat < stock_datetime.bin | head


и сравнить начальные блоки на старых и новых партах... может там какая магия
можете сюда писать, он просто напечатает несжатый и сжатый размеры
Это старый(до optimize final):

# clickhouse-compressor --stat < stock_datetime.bin | head
65536   13595
65536   13632
65536   13655
65536   14059
65536   13609
65536   13638
65536   13661
65536   14155
65536   13611
65536   13660



А это новый:

# clickhouse-compressor --stat < stock_datetime.bin | head
65536   25871
65536   30385
65536   27053
65536   30297
65536   31478
65536   29336
65536   27066
65536   28165
65536   27064
65536   25916
источник

D

Dmitry in ClickHouse не тормозит
Maxim Bogdanov
Я это буду делать руками (кодом), и хочется максимально завязаться на одной БД. Ну то есть ок, есть у меня две бд - одна колоночная, кликхаус, другая классичемкая OLTP для профилей. Вот я выгребаю профили по полу, выгреб 1млн id. Далее как мне их сджойнить с кликхаусом? Я же не смогу сделать SELECT * FROM events WHERE user_id IN(1,….,1000000 миллион ид) Это надо писать свой распределенный мэп-редьюсер, выходит 🙂 Спарк или что там ещё.
Redash умеет делать джойн между базами, запихивая результат запросов в память. Для аналитики сойдёт, но не очень вебскейл, конечно :)
источник

M

Maxim Bogdanov in ClickHouse не тормозит
Dmitry
Redash умеет делать джойн между базами, запихивая результат запросов в память. Для аналитики сойдёт, но не очень вебскейл, конечно :)
Так а в чём может быть подводный камень Replaceing MergeTree? Это же идеальное по идее  решение для моих потребоностей. Ведь килкхаус же более-менее джойнит сам таблицы между собой сейчас? (раньше вроде проблемы были)
источник

M

Maxim Bogdanov in ClickHouse не тормозит
Я пишу генератор данных, чтобы опробировать самому, но мало-ли у кого был опыт или есть какие идеи в этом направлении.
источник

A

Andrey in ClickHouse не тормозит
Maxim Bogdanov
Я это буду делать руками (кодом), и хочется максимально завязаться на одной БД. Ну то есть ок, есть у меня две бд - одна колоночная, кликхаус, другая классичемкая OLTP для профилей. Вот я выгребаю профили по полу, выгреб 1млн id. Далее как мне их сджойнить с кликхаусом? Я же не смогу сделать SELECT * FROM events WHERE user_id IN(1,….,1000000 миллион ид) Это надо писать свой распределенный мэп-редьюсер, выходит 🙂 Спарк или что там ещё.
1 млн в IN влетает запросто)
источник

M

Maxim Bogdanov in ClickHouse не тормозит
Andrey
1 млн в IN влетает запросто)
да ну это же как-то отдаёт костылём даже на первый взгляд. или нет?
источник

D

Dmitry in ClickHouse не тормозит
Maxim Bogdanov
Так а в чём может быть подводный камень Replaceing MergeTree? Это же идеальное по идее  решение для моих потребоностей. Ведь килкхаус же более-менее джойнит сам таблицы между собой сейчас? (раньше вроде проблемы были)
У меня чатик листается в фоне, и я тут зацепился за джойн между базами. Не знаю вашего контекста, мог вообще не в тему сказать :)
источник

M

Maxim Bogdanov in ClickHouse не тормозит
Dmitry
У меня чатик листается в фоне, и я тут зацепился за джойн между базами. Не знаю вашего контекста, мог вообще не в тему сказать :)
источник