|
Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
|
|||
---|---|---|---|
#18+
Имеется дерево подразделений примерно из 3500 узлов. Вложеность примерно 5-7 уровней. Имеется постоянная потребность искать инфу о списке родителей узлов. Дерево довольно активно трансформируется: добавляются узлы, старые узлы меняют свое содержимое. Конечный потребитель на фронте получает данные в виде JSON, где child отсортированны по алфавиту. Стал вопрос в каком виде это счастье хранить. Есть 2 подхода: 1. parent_id. Попытка построить дерево на стороне SQL ничего хорошего не дала. Рекурсия на стороне SQL работает долго. Ок. 2 секунд. В итоге отдаю дерево в виде отсортированного по глубине списка. Само дерево строится на фронте. Запрос работает быстро. Доделка дерева на фронте ок. 0.016 сек. Т.е. довольно живенько 2. hierarchyid. Зверь незнакомый. Но имеющий, судя по всему много плюсов. Во всяком случае, поиск родителей работает проще. Но один момент меня смутил. Как вставлять узлы. Для вставки необходимо знать номера узлов-соседей и вычислять номер в иерархии для нового узла. Первый вариант меня вполне устраивает, но грызут сомнение, что я упускаю шанс упростить работу с данными. Что вы можете порекомендовать в моем случае? Стоит ли связываться с hierarchyid? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 16:11 |
|
Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
|
|||
---|---|---|---|
#18+
Sniffka Имеется постоянная потребность искать инфу о списке родителей узлов Sniffka 2. hierarchyid. Поиск родителей через hierarchyid - это полный скан таблицы, что не быстро. hierarchyid удобен для поиска дочерних записей в дереве. Хотя для вашего объема 3500 записей, может, и скорости при сканирования будет приемлема. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 17:29 |
|
Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
|
|||
---|---|---|---|
#18+
Поиск происходит как раз от чилда к родителю. А не подскажете решение моего вопроса касающегося вставки узла? Или ссылочку на него. Ведь, если я правильно понимаю, дерево мне надо хранить отсортированным. И если я буду вставлять узел, то вставлять в хвост цепочки -- не вариант. Надо втюхивать как внутренний элемент цепи. И тут надо вводить дробные индексы. Типа так: 1, 2, 3, [3.5], 4 Еще вставочка: 1, 2, 3, [3.25], 3.5, 4 Еще вставочка: 1, 2, 3, [3.15], 3.25, 3.5, 4 И т.д. Я правильно понимаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 18:06 |
|
Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 18:09 |
|
Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
|
|||
---|---|---|---|
#18+
Спасибо за ссылку. Вроде и читал доку, но примера не помню. :о( А не могли бы вы обосновать почему hierarchyid и чем? И кроме того, можно ли при его помощи быстро построить JSON на стороне SQL, или все-же придется возвращать отсортированный по глубине и именам лист, чтобы собирать его на фронте? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 18:16 |
|
Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 18:23 |
|
Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
|
|||
---|---|---|---|
#18+
Количество уровней ограничено, следовательно можно использовать GetAncestor(n), где n от 1 до 9 через UNION ALL. И кластерный индекс создать по HID. Будет работать очень быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 18:39 |
|
Какой тип данных выбрать для хранения дерева parent_id или hierarchyid
|
|||
---|---|---|---|
#18+
msLex Sniffka Имеется постоянная потребность искать инфу о списке родителей узлов Sniffka 2. hierarchyid. Поиск родителей через hierarchyid - это полный скан таблицы, что не быстро. hierarchyid удобен для поиска дочерних записей в дереве. Хотя для вашего объема 3500 записей, может, и скорости при сканирования будет приемлема. интересно... но есть же хиерархический индекс, по нему родители ищутся быстро ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2020, 11:52 |
|
|
start [/forum/topic.php?fid=46&fpage=69&tid=1686506]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 339ms |
total: | 467ms |
0 / 0 |