Подтвердить что ты не робот

PostgreSQL ltree - vs tree module vs integer/string массивы или строковый разделительный путь

Как вы знаете, существует модуль для PostgreSQL под названием ltree. Кроме того, у вас есть возможность использовать тип массива для целых чисел (* 1, см. Комментарий ниже), который в этом тесте показывает, что он фактически выполняет немного медленнее с его рекурсивными запросами, по сравнению с ltree - за исключением индексации строк (* 2, см. комментарий ниже).

Я не слишком уверен в достоверности этих тестов, хотя.

Мой самый большой вопрос здесь - это относительно относительно неизвестный и почти недокументированный древовидный модуль. Описан здесь (где документация также может быть найдена!!) как:

поддержка иерархических типов данных (вид лексикографических деревьев), должен идти на вклад/дерево, ожидая из-за отсутствия надлежащего .

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

Я уже проанализировал разные модели древовидной структуры и из-за производительности запросов, масштабируемости и переупорядочения узлов и поддеревьев, являющихся моими основными требованиями, я смог исключить списки Adjacency (рекурсивный CTE не будет решать производительность, поскольку масштаб деревьев), вложенные наборы/интервалы (не достаточно быстро в некоторых запросах, учитывая его недостатки при манипулировании деревом), таблицы закрытия (ужасно при масштабировании больших сложных деревьев - не полезно для такого крупного проекта, как мой) и т.д. идти с материализованным путем, который является супер быстрым для операций чтения и позволяет легко перемещать поддеревья и узлы вокруг hiearchy. Таким образом, речь идет только о лучших из предлагаемых реализаций для материализованного пути.

Мне особенно любопытно слышать ваши теории или опыт с "деревом" в PostgreSQL.

4b9b3361

Ответ 1

Насколько я читал, contrib/tree никогда официально не выпускался, тогда как ltree был объединен с ядром PostgreSQL.

Я понимаю, что оба используют одну и ту же идею помеченного пути, но дерево допускает только целые метки, когда ltree разрешает текстовые метки, которые разрешают полнотекстовый поиск, считает, что полная длина пути ограничена (65Kb max, 2Kb предпочтительнее).