данные по сессиям проигрывания с полем id uuid. UUID я генерирую сам на своем софте.
Мне кажется, что будет хорошая и полезная идея первые 4 байта uuid отвести под UTC, тогда можно будет иметь осмысленную сортировку по такому id и она будет совпадать с партиционированием по датам.
Т.е. прямой поиск по таблице в которой миллиарды строк сразу подскажет в какой партиции искать.
Прямые поиски мне нужны для джойнов, потому сессии склеиваются друг с другом по полям типа source_id
Насколько это удачная идея или я вообще её плохо описал?
Как можно подсказать кликхаусу, в какой партиции искать запись, глядя на сам ключ (это извлекается из первых 4 байт uuid в таком формате) ?
А не проще время рядом положить? вот (substring(reinterpretAsString(A), 1, 4)), но я не уверен, рекомендую тестировать create table B (A UUID, C String ) Engine=MergeTree() partition by (substring(reinterpretAsString(A), 1, 4)) Order by A insert into B select generateUUIDv4(), number from numbers(10); select _part, * from B where A = '2b2fc98d-7dd6-4c15-824a-a673ebf846c5' и тестировать что прунинг работает. В мастере работает: set send_logs_level='debug' ; select _part, * from B where A = '2b2fc98d-7dd6-4c15-824a-a673ebf846c5'; Selected 1/10 parts by partition key
Идея была в том, чтобы помочь делать быстрые прямые выборки where id=Nnnn
эмммм, в общем ничего непонятно. Вы хотите подсказать КХ в какой партиции искать и у вас таблица уже партиционирована по дате. Или вы на этапе проектирования? Или вы предлагаете фичу запилить в КХ?
хм, если у вас в таблице ORDER BY id кх скорее всего сам сможет это использовать. Если этого нет, то можно попробовать minmax skip index попробовать
Я хочу понять, насколько возможно выбрать у таблицы uuid в качестве primary key, если я смогу подсказать кликхаусу, что первые 4 байта - это время создания и значит по ним можно партиционировать
Ну вот если сделать такой uuid, то order by как раз будет иметь смысл
нормальная идея, но лучше поделить на отдельные колонки и партиционировать по первой.
Наверное min max index с гранулой >1000 почти как partition minmax сработает
все равно колонки лучше. те же операции над партициями/range. uuid - 128 bit - все время кастить для range- сравнений итд, попросту греть планету
Обсуждают сегодня