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

Добрый день. Добрались потестить LowCardinality Взяли 2 версии нашей таблицы 1. CREATE

TABLE default.OriginalMetrics (`appId` UInt32, `metricId` UInt32, `timestamp` UInt32, `value` Float64, `tags.name` Array(UInt32), `tags.value` Array(UInt32), `savedTimestamp` UInt32 DEFAULT toUInt32(now()) CODEC(DoubleDelta)) ENGINE = ReplicatedMergeTree('/clickhouse/tables/metrics/shard1/OriginalMetrics', 'replica1') PARTITION BY floor(timestamp / 86400) ORDER BY (appId, metricId, timestamp) SETTINGS index_granularity = 8192;

Эти значения UInt32 но в другой подсистеме есть маппинг String -> UInt32 (вместо строк в КХ храним инты для экономии места и скорости запросов)
metricId UInt32
tags.name Array(UInt32)
tags.value Array(UInt32)


2. CREATE TABLE default.MetricsLowCardinality (`appId` UInt32, `metricId` LowCardinality(String), `timestamp` UInt32, `value` Float64, `tags.name` Array(LowCardinality(String)), `tags.value` Array(LowCardinality(String)), `savedTimestamp` UInt32 DEFAULT toUInt32(now()) CODEC(DoubleDelta)) ENGINE = ReplicatedMergeTree('/clickhouse/tables/metrics/shard1/MetricsLowCardinality', 'replica1') PARTITION BY floor(timestamp / 86400) ORDER BY (appId, metricId, timestamp) SETTINGS index_granularity = 8192;


Решили попробовать без нашего внешнего маппинга


metricId LowCardinality(String)
tags.name Array(LowCardinality(String))
tags.value Array(LowCardinality(String)),

Что получилось?

1. По месту на диске с LowCardinality есть даже выигрыш в 8-10%, круто.

2. А вот по скорости запросов просадка в 2 раза где-то.


Запросы вида

Наш маппинг
select * from OriginalMetrics where tags.value[indexOf(tags.name, 3)]=4 or tags.value[indexOf(tags.name, 25)]=6 or tags.value[indexOf(tags.name, 6)]=7 or tags.value[indexOf(tags.name, 7)]=8 or tags.value[indexOf(tags.name, 8)]=9;

localhost:9000, queries 8159, QPS: 195.443, RPS: 27743076.974, MiB/s: 1147.484, result RPS: 0.000, result MiB/s: 0.000.
LowCardinality

select * from MetricsLowCardinality where tags.value[indexOf(tags.name, '3')]='4' or tags.value[indexOf(tags.name, '25')]='6' or tags.value[indexOf(tags.name,' 6')]='7' or tags.value[indexOf(tags.name, '7')]='8' or tags.value[indexOf(tags.name, '8')]='9';


localhost:9000, queries 7874, QPS: 90.795, RPS: 10249710.351, MiB/s: 225.113, result RPS: 0.000, result MiB/s: 0.000.


Как я понимаю LowCardinality внитри работает как и наш маппинг, где-то внутри партиции храниться словарь

Почему работает в 2 раза медленнее? Может материализация Стринги происходит перед выполнением where? В некоторых случаях наверное можно этого избежать?
Как ускорить? Или скорости которая у нас с нашим маппингом все равно не достичь?

2 ответов

16 просмотров
wawanawna- Автор вопроса

Есть у кого-нибудь объяснение? Или лучше в Гите опрос задать?

Ну потому, что словарь на каждый парт и тд свой

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно 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
Карта сайта