Size: a a a

ClickHouse не тормозит

2020 May 25

A

Andrey in ClickHouse не тормозит
Спасибо
источник

D

Dj in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
т.е. типа вы хотите 100тыс. раз по индексу сделать startWith по 100млн. таблице, а потому наоборот? да никогда это не выполнится
да, нужна эвристика (т.е. структура "пути" позволяет некоторые вольности)...
2 подзадачи.
1. для каждой строки в 100 млн таблице сделать проверку на то является ли она одной подстрокой одной из строк 100 тыс таблицы  (это вообщем то решилось массивом родителей и развертыванием оного + дистинктом)

2. для каждой строки в 100 млн таблице проверить является ли одна из строк в 100 тыс таблице её подстрокой (тут уже сложнее, так как каждую строку в 100 млн таблице не поразбиваешь)... можно ли как то сделать словарь всех объектов? и вытащить из него во временную таблицу и уже применить прямой join/in? dictGetHierarchy наоборот?
источник

D

Dj in ClickHouse не тормозит
тогда №2 будет как
select fact.* from facts join (select children join   dictGetChildren(filterStr)  as children)
источник

l

lnuynxa in ClickHouse не тормозит
Dj
для родителей есть вариант через URLPathHierarchy, получать массив вида
["lvl1=2", "lvl1=2,lvl2=3", "lvl1=2,lvl2=3,lvl3=5"]


и использовать IN на нем, работает ОК. Так же есть вариант с иерархическими словарями (но там надо искусственные ID придумывать).
а айдишники такие простые?
или в задаче самой сложнее7
источник

D

Dj in ClickHouse не тормозит
lnuynxa
а айдишники такие простые?
или в задаче самой сложнее7
в задаче 50% строки 4-20 символов, 50% цифры от 0 до 1000
источник

l

lnuynxa in ClickHouse не тормозит
ну я к тому, что грубоговоря не заменить их на int, какой нить
источник

D

Dj in ClickHouse не тормозит
можно хранить например в массивах, поставить битмап/блум фильтр рядом если это что то даст... просто может кто-то уже делал структуру папок?
источник

l

lnuynxa in ClickHouse не тормозит
ну вообще ORDER BY таблицы, это уже отличная структура папок пркт, кмк
но вопрос какие у вас там на нее запросы будут
источник

D

Dj in ClickHouse не тормозит
lnuynxa
ну я к тому, что грубоговоря не заменить их на int, какой нить
lvl1=2,lvl2=3,lvl3=5,lvl4=2
—-
всю строку?
источник

D

Dj in ClickHouse не тормозит
lnuynxa
ну вообще ORDER BY таблицы, это уже отличная структура папок пркт, кмк
но вопрос какие у вас там на нее запросы будут
таблица и так ORDER BY по полному пути
источник

D

Dj in ClickHouse не тормозит
запросы такого рода
https://t.me/clickhouse_ru/162602
источник

D

Dj in ClickHouse не тормозит
lnuynxa
ну вообще ORDER BY таблицы, это уже отличная структура папок пркт, кмк
но вопрос какие у вас там на нее запросы будут
https://t.me/clickhouse_ru/162558
здесь пример
источник

l

lnuynxa in ClickHouse не тормозит
Dj
lvl1=2,lvl2=3,lvl3=5,lvl4=2
—-
всю строку?
не совсем,
типа
2*1+3 * 10^2 + 5 * 10^3 + 2 * 10^4
или в обратную сторону, что то вроде такого короче.
источник

D

Dj in ClickHouse не тормозит
ааа, т.е. все в enum обозначить и делать одним числом? можно но кардинальность каждого уровня заранее не известна
источник

D

Dj in ClickHouse не тормозит
но идея ясна и её можно развить, спасибо
источник

l

lnuynxa in ClickHouse не тормозит
Dj
ааа, т.е. все в enum обозначить и делать одним числом? можно но кардинальность каждого уровня заранее не известна
тут не совсем enum, а просто что то вроде мути с смещениям, может это чутка лучше будет через startswith
источник

D

Dj in ClickHouse не тормозит
это то что я имел ввиду под ручным блум фильтром (сначала сравнивать им, а потом уже сравнивать поверх этого startswith)
источник

l

lnuynxa in ClickHouse не тормозит
Dj
таблица и так ORDER BY по полному пути
я вижу некоторую разницу между
ORDER BY (path)
ORDER BY (lvl1_val,lvl2_val,lvl3_val)
источник

l

lnuynxa in ClickHouse не тормозит
возможно для каких то запросов тоже будет разница, мг
источник

D

Dj in ClickHouse не тормозит
lnuynxa
тут не совсем enum, а просто что то вроде мути с смещениям, может это чутка лучше будет через startswith
bitmap(hash1, hash2, hash3, hash4) - на level1
bitmap(hash21, hash22, hash23, hash24) - на level2
итд, и сравнивать вхождения, но это "работать" придется...
источник