Как реализовать сортировку потомков в nested sets от creocoder(yii2)?
Всем доброго времени суток. Использую nested sets от creocoder для хранения дерева. Встала задача по сортировке потомков в рамках одного уровня - но моя реализация с помощью стандартного метода что->insertAfter(куда) работает не вообразимо долго (больше 5 минут на ~2000 потомках одного уровня). Как побороть сию медлительность?
Ну так смотрите debug панель, там есть данные, что конкретно там долго работает.
И как связана insertAfter и сортировка? Вставка элемента в дерево и сортировка дерева. Где логика?
"И как связана insertAfter и сортировка?" - стандартных методов для сортировки в дереве от creocoder нет, есть только методы для перемещения узлов по дереву, ими и пользовался. По замерам именно insertAfter и лопает время: выполнение занимает ~ 0.09 c, то есть на 2000 записях это занимает 180 с, что невообразимо много.
Максим Тимофеев: Я не корректно выразился - задача не отсортировать результат запроса к базе, а отсортировать данные в базе (перемещением), чтобы они уже хранились в сортированном виде.
ordinary_pavel: главный минус nestedSets именно в скорости его изменения, которая увеличивается с ростом дерева. 2000 - это уже не мало и если такие операции надо производить постоянно, значит надо было выбрать другую архитектуру хранения.
Надо почитать про оптимизацию nestedSets, статей хватает. Может быть можно переписать методы или добавить свои к этому компоненту. Надо понимать что это, как часто используются те или иные манипуляции и т.д. что бы ответить более конкретно
Возможно Вы просто не верно его используете.