CollapsingMergeTree, ключ сортировки record_id имеет тип UUID. Её задача - удалять дубли.
В таблице 1.2 млрд записей, в день пишется около 100 млн новых, которые попарно схлопываются и остаются только оставшиеся без пар.
Выбор произвольной записи из этой таблицы по record_id занимает 2000мс и ест 100мб памяти, а если ключом сортировки сделать sipHash64(record_id), то поиск по нему происходит уже за 11мс.
Вопрос - а повлияет ли замена ключа сортировки с record_id на sipHash64(record_id) на скорость\качество схлопывания всей CollapsingMergeTree? Потому что сейчас есть ощущение, что приличная часть дублей никогда не схлопывается (не успевает?) до наступления TTL.
вместо UUID лучше использовать snowflake id UInt64 оно монотонно нарастает и ORDER BY и merge Работать будут быстрее
Спасибо, поизучаю. Но в текущей ситуации они прилетают извне и для начала надо научиться более быстро работать с этими. Разве что генерить для каждой прилетающей записи второй адишник и внутри работать с ним, а наружу отдавать оригинальный.
ну можете попробовать FINAL использовать чтобы дедупликация проходила уже в момент SELECT ...
а если выборка затронет 1ТБ данных, селект же будет дожидаться?
Кстати, с группировкой не всё так однозначно как с выбором одной записи: select record_id from TableWithUUIDKey group by record_id having sum(Sign) != 0 - 10 гигов памяти, 6700мс select record_id from TableWithHashedKey group by recordHash, record_id having sum(Sign) != 0 - 14 гигов памяти, 10200мс
select не ждет. Он сам делает final на лету, для себя лично.
потому что UUID 128бит. И надо больше памяти и возможно начинается вытеснение группировки на диск
на шедулер мержей ключ таблицы не влияет, шедулер мерже рассматривает размеры и кол-во партов
Обсуждают сегодня