большая MergeTree таблица, в которую примерно раз в несколько секунд добавляются батчами данные с timestamp.По всему содержимому таблицы запросы происходят достаточно редко. Зато часто поступают запросы на небольшие выборки за последние 10 минут. Вопрос: как эти небольшие выборки в несколько сотен строк эффективно организовать? Из того, что читал про Clickhouse, он не особо эффективен для маленьких выборок, так при select просматривает количество строк, равное index_granularity.
Пока думаю сделать LIVE VIEW в другую таблицу MergeTree с маленьким размером index_granularity.
А какой размер батча то? Сколько строк попадает под условие и сколько кх читает
Размер батча примерно 1k строк. При выборках за последние 10 минут чаще всего необходимо 100-200 строк.
Ну хорошо, а при этих выборках, сколько кх читает строк? (в clickhouse-client отображается)
Пока у меня ответа нет, так как система еще в стадии разработки.
Ок, просто если у вас правильное условие есть на timestamp и кх читает ~ последние минут 10 данных, то думаю все ок и так
Условие на timestamp при этих малых выборках как раз и есть "вернуть за последние 10 минут". То есть достаточно будет поместить timestamp в order_by?
Да на самом деле и сейчас почти все нормально тк. Данные были вставлены недавно и маловероятно, что они успели замержиться с старыми данными от этой партиции, так что кх будет читать относительно небольшие объемы данных из за partition prunning > То есть достаточно будет поместить timestamp в order_by? Поместить его можно (на последнюю позицию в ORDER BY) но просто из за того, что скорее всего это улучшит сжатие.
Но если не поставить его в order_by, то кх разве не будет искать и в старых данных тоже?
Если у вас эта колонка есть в PARTITION BY то нет, не будет
Запускайте ваши запросы с set send_logs_level='trace'; через clickhouse-client и смотрите что происходит, там все довольно подробно описывается
Обсуждают сегодня