Size: a a a

ClickHouse не тормозит

2020 May 25

l

lnuynxa in ClickHouse не тормозит
Dj
да, нужна эвристика (т.е. структура "пути" позволяет некоторые вольности)...
2 подзадачи.
1. для каждой строки в 100 млн таблице сделать проверку на то является ли она одной подстрокой одной из строк 100 тыс таблицы  (это вообщем то решилось массивом родителей и развертыванием оного + дистинктом)

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

D

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

D

Dj in ClickHouse не тормозит
lnuynxa
тебе вернуть нужно какие данные? просто пути?
можно и просто пути, но в конечном итоге есть ещё больше факт таблица

path, key, value

и надо вернуть всю кучу key-value для фильтра, его родителей и детей
источник

D

Dj in ClickHouse не тормозит
но можно делать в два этапа загрузкой путей во временную таблицу... это не критично
источник

l

lnuynxa in ClickHouse не тормозит
Dj
можно и просто пути, но в конечном итоге есть ещё больше факт таблица

path, key, value

и надо вернуть всю кучу key-value для фильтра, его родителей и детей
Я к тому. что может просто с помощью MAT VIEW сразу размножать запись сразу по всем ее родителям?
источник

D

Dj in ClickHouse не тормозит
lnuynxa
Я к тому. что может просто с помощью MAT VIEW сразу размножать запись сразу по всем ее родителям?
всех детей в массив путей?
источник

D

Dj in ClickHouse не тормозит
тут факториалом пахнет... особенно в "корне" дерева
источник

l

lnuynxa in ClickHouse не тормозит
Dj
т.е. если пользователь просит

lvl1=2,lvl2=3,lvl3=5


надо вывести результаты для всех родителей и детей тоже
lvl1=2,lvl2=3,lvl3=5 -- filter object itself
lvl1=2,lvl2=3,lvl3=5,lvl4=2 -- child of filter object
lvl1=2,lvl2=3,lvl3=5,lvl4=44 -- child of filter object
lvl1=2,lvl2=3 -- parent of filter object
ну я про это
источник

l

lnuynxa in ClickHouse не тормозит
но тут вопрос про глубину путей конечно
источник

D

Dj in ClickHouse не тормозит
lnuynxa
ну я про это
можно развернуть мысль? я туплю
источник

l

lnuynxa in ClickHouse не тормозит
хотя фигня, имхо
источник

D

Dj in ClickHouse не тормозит
спасибо за идеи, мы попробуем те, что выше
источник

AT

Al T in ClickHouse не тормозит
надо просить tinkerpop поддержку в clickhouse :)
источник

l

lnuynxa in ClickHouse не тормозит
Dj
join не обязателен, но во второй таблице может быть до 100 тыщ элементов...
ага, пользователь в фильтре выбирает N путей, и в конечном счете может выбрать вплоть до 100 тыщ элементов?
источник

D

Dj in ClickHouse не тормозит
lnuynxa
ага, пользователь в фильтре выбирает N путей, и в конечном счете может выбрать вплоть до 100 тыщ элементов?
да, UI строит деревья по нескольким "плоскостям"
источник

AT

Al T in ClickHouse не тормозит
я чета может путаю, но делают же materialized paths в RDBMS в таких случаях?  тем более в клике массивы есть
источник

D

Dj in ClickHouse не тормозит
задача на самом деле решалась бы мигом, если был бы некоторый функционал:
- полноценные Join не cross (по startsWith) например
- иерархические массивы с функцией возврата всех детей
- arrayExists не копирующий весь входной массив для каждой строки
источник

D

Dj in ClickHouse не тормозит
куча решений, но везде чуток не хватило )))
источник

l

lnuynxa in ClickHouse не тормозит
Dj
да, UI строит деревья по нескольким "плоскостям"
просто допустим, я вижу как для одного пути кликхаус с легкостью достанет и путь и подпути и родителя по индексу.
Но проблема в том, что таких путей очень много?
источник

D

Dj in ClickHouse не тормозит
lnuynxa
просто допустим, я вижу как для одного пути кликхаус с легкостью достанет и путь и подпути и родителя по индексу.
Но проблема в том, что таких путей очень много?
да, для одного или нескольких путей это решится multiSearch* функциями
источник