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

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

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

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

Ответ 1

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

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

Ответ 2

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