powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
8 сообщений из 8, страница 1 из 1
Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
    #39924730
Sniffka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется дерево подразделений примерно из 3500 узлов. Вложеность примерно 5-7 уровней. Имеется постоянная потребность искать инфу о списке родителей узлов. Дерево довольно активно трансформируется: добавляются узлы, старые узлы меняют свое содержимое. Конечный потребитель на фронте получает данные в виде JSON, где child отсортированны по алфавиту.
Стал вопрос в каком виде это счастье хранить. Есть 2 подхода:
1. parent_id. Попытка построить дерево на стороне SQL ничего хорошего не дала. Рекурсия на стороне SQL работает долго. Ок. 2 секунд. В итоге отдаю дерево в виде отсортированного по глубине списка. Само дерево строится на фронте. Запрос работает быстро. Доделка дерева на фронте ок. 0.016 сек. Т.е. довольно живенько
2. hierarchyid. Зверь незнакомый. Но имеющий, судя по всему много плюсов. Во всяком случае, поиск родителей работает проще. Но один момент меня смутил. Как вставлять узлы. Для вставки необходимо знать номера узлов-соседей и вычислять номер в иерархии для нового узла.
Первый вариант меня вполне устраивает, но грызут сомнение, что я упускаю шанс упростить работу с данными. Что вы можете порекомендовать в моем случае? Стоит ли связываться с hierarchyid?
...
Рейтинг: 0 / 0
Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
    #39924771
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sniffka
Имеется постоянная потребность искать инфу о списке родителей узлов

Sniffka
2. hierarchyid.

Поиск родителей через hierarchyid - это полный скан таблицы, что не быстро. hierarchyid удобен для поиска дочерних записей в дереве.


Хотя для вашего объема 3500 записей, может, и скорости при сканирования будет приемлема.
...
Рейтинг: 0 / 0
Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
    #39924820
Sniffka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поиск происходит как раз от чилда к родителю.
А не подскажете решение моего вопроса касающегося вставки узла? Или ссылочку на него. Ведь, если я правильно понимаю, дерево мне надо хранить отсортированным. И если я буду вставлять узел, то вставлять в хвост цепочки -- не вариант. Надо втюхивать как внутренний элемент цепи. И тут надо вводить дробные индексы. Типа так:
1, 2, 3, [3.5], 4
Еще вставочка:
1, 2, 3, [3.25], 3.5, 4
Еще вставочка:
1, 2, 3, [3.15], 3.25, 3.5, 4
И т.д.
Я правильно понимаю?
...
Рейтинг: 0 / 0
Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
    #39924826
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sniffka
Поиск происходит как раз от чилда к родителю.

Этот как раз самый плохой вариант для hierarchyid



Sniffka
А не подскажете решение моего вопроса касающегося вставки узла?


https://docs.microsoft.com/ru-ru/sql/relational-databases/tables/lesson-2-creating-and-managing-data-in-a-hierarchical-table?view=sql-server-ver15
...
Рейтинг: 0 / 0
Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
    #39924832
Sniffka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ссылку. Вроде и читал доку, но примера не помню. :о(
А не могли бы вы обосновать почему hierarchyid и чем?
И кроме того, можно ли при его помощи быстро построить JSON на стороне SQL, или все-же придется возвращать отсортированный по глубине и именам лист, чтобы собирать его на фронте?
...
Рейтинг: 0 / 0
Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
    #39924837
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sniffka
И кроме того, можно ли при его помощи быстро построить JSON на стороне SQL


https://docs.microsoft.com/ru-ru/sql/relational-databases/json/format-query-results-as-json-with-for-json-sql-server?view=sql-server-ver15
...
Рейтинг: 0 / 0
Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
    #39924850
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Количество уровней ограничено, следовательно можно использовать GetAncestor(n), где n от 1 до 9 через UNION ALL. И кластерный индекс создать по HID. Будет работать очень быстро.
...
Рейтинг: 0 / 0
Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
    #39925548
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex
Sniffka
Имеется постоянная потребность искать инфу о списке родителей узлов

Sniffka
2. hierarchyid.

Поиск родителей через hierarchyid - это полный скан таблицы, что не быстро. hierarchyid удобен для поиска дочерних записей в дереве.


Хотя для вашего объема 3500 записей, может, и скорости при сканирования будет приемлема.


интересно... но есть же хиерархический индекс, по нему родители ищутся быстро
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]