172 похожих чатов

Всем привет! Расскажите пожалуйста чем отличается решения хранения древовидной структуры

данных ltree от nestedset?
Понятно что в ltree есть path а в nestedset lft_key rght_key
Производительность, удобство и т.д.

2 ответов

7 просмотров

https://t.me/pgsql/479677 и последующее обсуждение (оно не совсем в тему, но в результате Вам станет понятно, что в этом сравнении есть только один адекватный метод, так что...).

Это разные структуры. В случае с ltree мы храним весь path до узла в отдельном поле и не привязаны к порядку записи, можем добавлять индекс и достаточно быстро и просто выбирать как всю ветку по родителю так и всех родителей узла. Но платим за это хранением всего пути для каждой записи, что может быть критично для очень больших таблиц. NS же хранит только уровень, порядковый номер в дереве (lkey) и информацию о количестве вложенных элементов (r key), что несколько затрудняет прямой доступ к родителю (решается добавлением patent_id) и приводит к необходимости перестроения всего дерева при добавлении новых элементов. Зато уменьшаются накладные расходы на хранение. В 90% случаев можно обойтись связкой id<-parent_id, если по какой-то причине этого не достаточно, нужно смотреть по обстоятельствам, но с ltree (matpath) как по мне удобнее работать.

Похожие вопросы

Обсуждают сегодня

лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Здравствуйте, хочу сделать HelloWorld в консоли Дельфи, но функция API ничего не выводит, что я делаю не так? program Hello; {$APPTYPE CONSOLE} uses System.SysUtils, WinAPI.Wi...
Sergey Vinogradov
20
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
#include <stdio.h> #include <stdlib.h> #include <time.h> int** generate_table(int size_matrix) { int** matrix = (int**)malloc(size_matrix * sizeof(int*)); for (int i ...
Чувак
1
@PerlBanjoBot use v5.38; sub split_on_cond($arr, $cond) { ($a, $b) = ([], []); push @{ $cond->($_) ? $a : $b }, $_ for @$arr; ($a, $b) } use Data::Dumper; warn Dumpe...
Sergei Zhmylove
10
Вот объясните, как это работает: Вот есть допустим unix-подобная система, и программа запускает допустим printf или fork, как это передается ядру, и как оно обрабатывать начин...
Егор
14
Всем привет! как узнать, что текст в TSkLabel был выведен сокращенным ? Есть функция для TLabel которая позволяет определить , что текст выведен сокращенным function TFrmMai...
DELPHI SOLUTIONS
6
Дебил? Я ищу друга
Bitard 228
27
У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
Карта сайта