Fesor
@Fesor
Full-stack developer (Symfony, Angular)

Nested Sets VS Nested Intervals?

Собственно, наткнулся на реализацию хранения древовидных структур с импользованием вложенных интервалов. Поиски особо ничего не дали, кроме как информации о том, что этот метод является попыткой улучшить метод со вложенными множествами. Более подробной информации о возможных подводных камнях я не нашел, так же как и явных доводов (помимо уменьшения колличества операций переиндексации) ЗА.


В данный момент выбираю метод хранения древовидных структур, где операции вставки/перемещения/удаления будут во много порядков более редки, неже ли выборка ветвей. Так что тут оптимизация этих операций не существенны. Но на будущее хотел бы знать, что лучше.
  • Вопрос задан
  • 3559 просмотров
Пригласить эксперта
Ответы на вопрос 2
alekciy
@alekciy
Вёбных дел мастер
На вскидку для NI возникает такой минус — исчерпание размеров левого и правого ключей, когда придется перейти с, допустим, int на bigint. Зависит от соотношения размера дерева и шага для дырок в ключах. В принципе не проблема, потребуется просто чуть больше ресурсов. Но стоит о таких вещах подумать заранее, что бы не получилось так, что в самый неподходящий момент ресурсов то и не хватит.

Алгоритмический минус по сравнению с NS — зная левый и правый ключи узла невозможно вычислить количество потомков, а в NS это можно. К примеру, если каталог товаров храниться в NS, то для текущей категории (узел) можно указывать количество_товара/количество_подразделов/другое просто получив эту категорию и не получая её потомков.

В общем те или иные плюсы/минусы могут рассматриваться в контексте размера дерева, отношения количество_выборок/количество_вставок, аппаратных ресурсов.
Ответ написан
max_mara
@max_mara
В nested sets проблема с которой я столкнулся — обязательно должна быть корневая категория, иначе у меня все сыпалось лесом. Еще периодически у меня сбивались ключи и структура дерева тоже рассыпалась.

Поэтому у нас всегда кроме ключей, есть еще parent_id, по которому всегда можно восстановить дерево. Больше проблем не возникало.
Радует удобство выборки, если есть глубокая вложенность, не надо доставать все ветви рекурсией, все делается одним запросом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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