Рекурсия

WMix

герр M:)ller
Партнер клуба
а мы и отвечаем либо на глупые вопросы либо на умные, на умный ответили, давай уже глупые ;)
 

mihail.zagoskin

Новичок
а мы и отвечаем либо на глупые вопросы либо на умные, на умный ответили, давай уже глупые ;)
В Nested Sets я не понимаю как динамически обновлять дерево. То-есть добавили новый элемент, и дальше что, какой алгоритм действий.
 

fixxxer

К.О.
Партнер клуба

Вставка в nested sets дорогая - надо обновлять все дерево. Зато выборка поддерева элементарная, никаких рекурсий, простейший запрос.

И то и другое дешево - так не бывает.

Вообще была такая книга Trees in SQL by Joe Celko, там рассмотрены все возможные варианты, их плюсы и минусы.
 

mihail.zagoskin

Новичок

Вставка в nested sets дорогая - надо обновлять все дерево. Зато выборка поддерева элементарная, никаких рекурсий, простейший запрос.

И то и другое дешево - так не бывает.

Вообще была такая книга Trees in SQL by Joe Celko, там рассмотрены все возможные варианты, их плюсы и минусы.
ну да, так как у меня млм, нужно вставить, пересчитать дерево и решать, что с ним делать, переводить человека на сл. уровень или ждать еще людей. Я при переводе на сл. уровень снова проверка. Ну тут опять же, без рекурсии никуда.
 

fixxxer

К.О.
Партнер клуба
А опиши подробно алгоритм словами (бизнес-логику, не думая над конкретными реализациями операций вставки или выборки). У меня есть идея, но я не уверен, что подойдет )
 

mihail.zagoskin

Новичок
А опиши подробно алгоритм словами (бизнес-логику, не думая над конкретными реализациями операций вставки или выборки). У меня есть идея, но я не уверен, что подойдет )
Который у меня, или описать механизм логики проекта?
 

mihail.zagoskin

Новичок
МЛМ проект, матричная структура. Под каждым человек два партнера в первой линии, и четыре во второй. При закрытие второй линии, то есть когда там четыре человека, верхнего перекидывает на второй уровень и так далее хоть до бесконечности.

Нюансы:
Если у человека в первой линии уже два человека, то его партнер приглашенный идет вниз, к первому открытому партнеру, сверху вниз, слева-направо, относительно пригласившего, так называемый перелив. Вот на этом основная проблема, так как искать свободного человека, в большой структуре долго.
 

fixxxer

К.О.
Партнер клуба
materialized path с дополнительной денормализацией capacity + usage?
 

fixxxer

К.О.
Партнер клуба
В каждом узле хранить полный путь к нему, типа 1->3->4 = path "000000010000000300000004" (конечно, лучше инты упаковать в varbinary по принципу pack(), для читаемости оставлю строками), и дополнительно поля, сколько тут уже деток есть (ну или наоборот, сколько свободных мест осталось). Capacity у тебя вроде фиксированный 2, можно тогда просто хранить free - по дефолту 2, добавили подузел - декрементим, если получается меньше 0 то перемещаем. Тогда для того, что ты называешь переливом (допустим, переливаем из 1->3), чтобы понять куда перелить достаточно одного запроса вида select .. from .. where path like '0000000100000003%' and free > 0 order by path limit 1
 

WMix

герр M:)ller
Партнер клуба
Под каждым человек два партнера в первой линии, и четыре во второй.
там всего 3 уровня, можно self join и на его структуре это будет работать как ракета,
 

mihail.zagoskin

Новичок
там всего 3 уровня, можно self join и на его структуре это будет работать как ракета,
Это для перехода на уровень 2 например нужно заполнить две линии, два человека и четыре. А линий под конкретным человеком может быть бесконечно много и все эти линии пройти нужно и найти свободного. Ну грубо говоря пирамидальная система и каждый раз, нужно ставить кирпичик сверху вниз
 
Сверху