Size: a a a

ClickHouse не тормозит

2020 July 27

D

Dj in ClickHouse не тормозит
Dmitry Koreckiy
@den_crane

Условная таблица.
Поиск по любой колонке, asc/desc сортировки по любому полю

CREATE TABLE test_table (
 `childId` LowCardinality(String),
 `parentId` LowCardinality(String),
 `views` Int64,
 `clicks` Int64,
 `startedAt` DateTime,
 `finishedAt` DateTime,
 `isLive` UInt8,
 `isAdult` UInt8,
 `language` String
) ENGINE = ReplacingMergeTree() PARTITION BY substring(parentId, 1, 2)
ORDER BY
 (childId, parentId) SETTINGS index_granularity = 512
есть хоть какие-нибудь колонки, которые точно есть во всех запросах? если да, ставьте их в PK
если есть коррелирующие колонки, можете ставить их в конец PK
источник

D

Dmitry Koreckiy in ClickHouse не тормозит
Dj
есть хоть какие-нибудь колонки, которые точно есть во всех запросах? если да, ставьте их в PK
если есть коррелирующие колонки, можете ставить их в конец PK
увы нет 🙂 в этом и проблема)
источник

BB

Bral Bral in ClickHouse не тормозит
Dmitry Koreckiy
@den_crane

Условная таблица.
Поиск по любой колонке, asc/desc сортировки по любому полю

CREATE TABLE test_table (
 `childId` LowCardinality(String),
 `parentId` LowCardinality(String),
 `views` Int64,
 `clicks` Int64,
 `startedAt` DateTime,
 `finishedAt` DateTime,
 `isLive` UInt8,
 `isAdult` UInt8,
 `language` String
) ENGINE = ReplacingMergeTree() PARTITION BY substring(parentId, 1, 2)
ORDER BY
 (childId, parentId) SETTINGS index_granularity = 512
Такое уже проходили, на ~ 2-3 ккк записей пошли проседания по скорости ответа , поэтому, наверно , ничего лучше , чем дублирование таблиц - каждый отсортирован по первичному ключу - который является предикатом запроса , в плане скорости  , нет .
источник

D

Dj in ClickHouse не тормозит
Dmitry Koreckiy
увы нет 🙂 в этом и проблема)
ставьте колонки с низкой кардинальностью is* в начало PK
источник

BB

Bral Bral in ClickHouse не тормозит
И повторы тогда лучше убивать не в самом кликхаусе , а где-то вне
источник

BB

Bral Bral in ClickHouse не тормозит
Dmitry Koreckiy
увы нет 🙂 в этом и проблема)
А так держите N копий таблиц, отсортированных по вашему предикату.
источник

D

Dj in ClickHouse не тормозит
Bral Bral
А так держите N копий таблиц, отсортированных по вашему предикату.
N факториал, аха )
источник

D

Dmitry Koreckiy in ClickHouse не тормозит
Bral Bral
А так держите N копий таблиц, отсортированных по вашему предикату.
ну я так и думал что, под каждый возможный фильтр создавать таблицы с колонками child, parentId, views/etc
источник

BB

Bral Bral in ClickHouse не тормозит
Dmitry Koreckiy
ну я так и думал что, под каждый возможный фильтр создавать таблицы с колонками child, parentId, views/etc
Ну да, тут как mssql , когда повесил миллион индексов на таблицу , не работает .
источник

D

Dj in ClickHouse не тормозит
Bral Bral
Ну да, тут как mssql , когда повесил миллион индексов на таблицу , не работает .
тут индексы спарс, больших тормозов не будет, и пользы не будет
источник

D

Dmitry Koreckiy in ClickHouse не тормозит
Dj
тут индексы спарс, больших тормозов не будет, и пользы не будет
добавил скип индекс на поле, вставка просела с 2кк/с до 200к-300к/с
источник

BB

Bral Bral in ClickHouse не тормозит
Опять же зависит от случая , если у вас , вдруг так получилось, значения по которым будите искать низкокардинальные , и общий объем невелик - почему бы и нет. Но при резких увеличениях объема данных сразу начнутся проблемы.
источник

BB

Bral Bral in ClickHouse не тормозит
Dmitry Koreckiy
добавил скип индекс на поле, вставка просела с 2кк/с до 200к-300к/с
Это вы с каким периодом skipindex вставляете ? Может вам так частно не нужно .
источник

D

Dj in ClickHouse не тормозит
Dmitry Koreckiy
добавил скип индекс на поле, вставка просела с 2кк/с до 200к-300к/с
у вас гранулярность урезана в 512... но вообще не должно так проседать, где то куда то упирается у вас...
источник

D

Dmitry Koreckiy in ClickHouse не тормозит
период у индекса в GRANULARITY указывается же? (до сих пор в доке нет описания скип индексов)
источник

D

Dj in ClickHouse не тормозит
Dmitry Koreckiy
период у индекса в GRANULARITY указывается же? (до сих пор в доке нет описания скип индексов)
да, есть там все... чем выше GRANULARITY тем разреженней индекс, тем меньше от него пользы, тем меньше от него тормозов
источник

D

Dj in ClickHouse не тормозит
Dmitry Koreckiy
период у индекса в GRANULARITY указывается же? (до сих пор в доке нет описания скип индексов)
есть у mergetree - index_granularity - определяет размер гранул в строках
есть у skipping-index GRANULARITY (количество гранул на одну "метку" индекса)

https://github.com/ClickHouse/ClickHouse/issues/4414#issuecomment-465215828
источник

D

Dmitry Koreckiy in ClickHouse не тормозит
по большому счету ставить GRANULARITY индекса меньше размера гранул ни к чему?
источник

D

Dj in ClickHouse не тормозит
Dmitry Koreckiy
по большому счету ставить GRANULARITY индекса меньше размера гранул ни к чему?
GRANULARITY 0.5? я думаю он даже не разрешит, и даже если разрешит думаю в коде зашито чтение гранулами с диска, вряд ли оно на что-то повлияет...
источник

D

Dmitry Koreckiy in ClickHouse не тормозит
до этого был 1, поставил 512 скорость вставки выросла значительно и количество прочитанных строк для получения ответа вполне удовлетворяет
источник