Как стать автором
Обновить

Вот это скорость! Как мы подружили наш UBA-модуль с ClickHouse и что из этого вышло

Время на прочтение11 мин
Количество просмотров4.5K
Всего голосов 14: ↑13 и ↓1+12
Комментарии12

Комментарии 12

Оказывается, ClickHouse сделан так, что он может пережить 100 вставок в секунду, а в каждой вставке при этом 10 000 строк.

Можно поинтересоваться что за строки — сколько столбцов, каков размер строки? И не совсем уловил характеристики "железа", на котором этот впечатляющий миллион достигается.


Вставка атомарная? Т.е. если вставляешь 10.000 строк не получится ли так, что пара тысяч строк вставились, а остальные — нет?

Можно поинтересоваться что за строки — сколько столбцов, каков размер строки? И не совсем уловил характеристики «железа», на котором этот впечатляющий миллион достигается.

Столбцов порядка 20, общий размер строки в пределах 1КБ
Железо, 4 ядра, 32ГБ RAM, 500ГБ HDD

Клик заточен для хранения и обработки большого числа мелких строк, поля с большим объемом тут хранить не рекомендуется.

Вставка атомарная? Т.е. если вставляешь 10.000 строк не получится ли так, что пара тысяч строк вставились, а остальные — нет?

В Клике вставка в общем случае неатомарная, и как раз может получиться такая ситуация, если нужна гарантия, то либо нужно в прикладе перепроверять и перевставлять,
либо искать другое решение.
500ГБ HDD

Да, сурово. С учетом гигабайтного трафика, получается, в 5-10 раз сжимаются данные, чтобы в производительность HDD "вместиться".

Вставка атомарная.

Интересно. А можете прокомментировать вот это:


It could be atomic if
  • only if it inserts into only one partition
  • only if number of rows is less than max_insert_block_size (and others
  • min_insert_block_size_rows,min_insert_block_size_bytes)
  • only if a table does not have MV (there is no atomicity Table <-> MV)

Почти всё правильно написано.


Если при вставке затронуто несколько партиций, то вставка в каждую из них атомарна по отдельности, но не весь INSERT в целом.


max_insert_block_size по-умолчанию 1 млн. строк, если вставка меньше, то она разбивается на несколько. Настройку max_insert_block_size можно менять по своему усмотрению.


min_insert_block_size_rows, min_insert_block_size_bytes не влияют на атомарность, тут Denny Crane ошибся.


Если на таблицу навешаны материализованные представления, то вставка в таблицу, по прежнему, атомарна, как и вставки во все связанные таблицы, но все эти вставки вместе не являются атомарной операцией.

Изначально ClickHouse был NoSQL-СУБД...

Это неправда. ClickHouse с самого появления умел SQL.

Наверно правильнее будет использовать определение языка из Википедии как SQL-подобного:
https://en.wikipedia.org/wiki/ClickHouse
SQL support. ClickHouse supports an extended SQL-like language that includes arrays and nested data structures, approximate and URI functions, and the availability to connect an external key-value store.

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

Всё так, но SQL-like != noSQL.

А не пробовали ограничивать ClickHouse в ОЗУ при помощи cgroups? Как он к ним отнесётся?
Не пробовали, есть ощущение что Клик будет падать при достижении ограничения.
Упадёт, может быть даже по oom.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий