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

Добрый вечер! Может, уже кто-то сталкивался с подобным кейсом. Имеется

большая MergeTree таблица, в которую примерно раз в несколько секунд добавляются батчами данные с timestamp.По всему содержимому таблицы запросы происходят достаточно редко. Зато часто поступают запросы на небольшие выборки за последние 10 минут. Вопрос: как эти небольшие выборки в несколько сотен строк эффективно организовать? Из того, что читал про Clickhouse, он не особо эффективен для маленьких выборок, так при select просматривает количество строк, равное index_granularity.

Пока думаю сделать LIVE VIEW в другую таблицу MergeTree с маленьким размером index_granularity.

11 ответов

7 просмотров

А какой размер батча то? Сколько строк попадает под условие и сколько кх читает

Nikita- Автор вопроса
Dmitry [Altinity] Titov
А какой размер батча то? Сколько строк попадает п...

Размер батча примерно 1k строк. При выборках за последние 10 минут чаще всего необходимо 100-200 строк.

Nikita
Размер батча примерно 1k строк. При выборках за по...

Ну хорошо, а при этих выборках, сколько кх читает строк? (в clickhouse-client отображается)

Nikita- Автор вопроса
Dmitry [Altinity] Titov
Ну хорошо, а при этих выборках, сколько кх читает ...

Пока у меня ответа нет, так как система еще в стадии разработки.

Nikita
Пока у меня ответа нет, так как система еще в стад...

Ок, просто если у вас правильное условие есть на timestamp и кх читает ~ последние минут 10 данных, то думаю все ок и так

Nikita- Автор вопроса
Dmitry [Altinity] Titov
Ок, просто если у вас правильное условие есть на t...

Условие на timestamp при этих малых выборках как раз и есть "вернуть за последние 10 минут". То есть достаточно будет поместить timestamp в order_by?

Nikita
Условие на timestamp при этих малых выборках как р...

Да на самом деле и сейчас почти все нормально тк. Данные были вставлены недавно и маловероятно, что они успели замержиться с старыми данными от этой партиции, так что кх будет читать относительно небольшие объемы данных из за partition prunning > То есть достаточно будет поместить timestamp в order_by? Поместить его можно (на последнюю позицию в ORDER BY) но просто из за того, что скорее всего это улучшит сжатие.

Nikita- Автор вопроса
Dmitry [Altinity] Titov
Да на самом деле и сейчас почти все нормально тк. ...

Но если не поставить его в order_by, то кх разве не будет искать и в старых данных тоже?

Nikita
Но если не поставить его в order_by, то кх разве н...

Если у вас эта колонка есть в PARTITION BY то нет, не будет

Nikita
Спасибо!

Запускайте ваши запросы с set send_logs_level='trace'; через clickhouse-client и смотрите что происходит, там все довольно подробно описывается

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта