Являются ли вложенные интервалы жизнеспособным решением проблемы снижения производительности СУБД вложенного набора (модифицированного обхода предварительного заказа)?

Среди известных ограничений вложенных наборов Джо Селко (модифицированный обход предварительного заказа) стоит отметить снижение производительности по мере роста дерева до большого размера.

Вадим Тропашко предложил вложенные интервалы и приводит примеры и теоретическое объяснение в этой статье: http://arxiv.org/html/cs.DB/0401014

Это жизнеспособное решение, есть ли какие-нибудь жизнеспособные примеры (на любом языке), абстрагированные от собственного уровня БД?


person Community    schedule 11.12.2008    source источник
comment
Взгляните на мой вопрос: stackoverflow.com/questions/1049748/ Прокомментируйте, если хотите. Я сейчас тоже исследую это пространство.   -  person Mark Renouf    schedule 26.06.2009
comment
Это невероятно гениальная идея, я дам ей это. Но действительно ли это будет быстрее, чем родительские указатели в базе данных, которая поддерживает рекурсивные запросы, как это делают недавние выпуски всех серьезных баз данных (т.е. все, кроме MySQL!)?   -  person Tom Anderson    schedule 24.08.2010


Ответы (2)


Хотя я видел примеры для вложенных наборов, я видел мало для вложенных интервалов, хотя теоретически преобразование из одного в другое не должно быть трудным. Вместо того, чтобы выполнять предварительный обход для маркировки узлов, выполните рекурсию в ширину. Уловка состоит в том, чтобы найти наиболее эффективный способ пометить n дочерних узлов узла. Поскольку узел между a / b и c / d является (a + c) / (b + d), плохо подготовленная вставка (например, вставка дочерних элементов слева направо), рискует создать такой же экспоненциальный рост в значениях индекса, например, используя полный материализованный путь. Противодействовать этому эффекту несложно - создавайте новые индексы по одному, вставляя каждый в то место, которое дает наименьший результирующий знаменатель.

Что касается снижения производительности, многое зависит от операций, которые вы собираетесь выполнять. Есть еще некоторые операции, которые потребуют полной перемаркировки всего дерева - методы вложенного набора или вложенного интервала лучше всего подходят для структур, которые редко меняются. Если вы вносите много изменений в структуру иерархии, возможно, будет проще работать со «стандартной» структурой родительско-дочерней таблицы. помните также, что некоторые операции (например, количество потомков) намного проще с целочисленной маркировкой вложенных наборов, чем методы интервалов.

person Chris    schedule 12.12.2008

Я написал жемчужину, которая абстрагирует все вычисления вложенных интервалов, которые будут использоваться с Rails ActiveRecord https://github.com/clyfe/acts_as_nested_interval/, который используется в продакшене в нескольких системах.

person clyfe    schedule 25.09.2012
comment
Кажется, это не ответ на вопрос? - person Roland Bouman; 30.07.2018