您可能知道 PostgreSQL 有一个名为 ltree 的模块。此外,您还可以将 Array 类型用于整数(*1,请参见下面的评论),在此测试中,与 ltree 相比,它的递归查询实际上执行得稍慢 - 除了字符串索引(*2,请参阅下面的评论)。
不过,我不太确定这些测试结果的可信度。
我最大的问题实际上是关于相对未知且几乎没有文档的树模块。此处描述(也可以在其中找到文档!!)为:
对分层数据类型(某种词典树)的支持,应该转到 contrib/tree,由于缺乏适当的 文档而待定。
阅读完文档后,我有点困惑是否应该建立我的大型应用程序(一个 CMS,所有内容都将存储在分层树结构中 - 不仅是内容,还有文件等,所以你可以看到这会迅速扩大)围绕 ltree,普通的物化路径(路径枚举),以分隔的字符串或整数数组作为路径 - 或者如果理论上相对未知的“树”模块应该是两者的更快执行、更可扩展和更好的解决方案.
我已经分析了不同的树结构模型,并且由于节点和子树的查询性能、可伸缩性和重新排序是我的主要要求,我已经能够排除邻接列表(递归 CTE 无法解决性能问题,因为树的规模很大),嵌套集/间隔(在某些查询中速度不够快,考虑到它在操作树时的缺点),闭包表(在复杂树中非常大 - 对我这样的大型项目没有用处)等并决定使用物化路径,对于读取操作来说非常快,并且可以轻松地在层次结构中移动子树和节点。所以问题只是关于物化路径的最佳建议实现。
我特别好奇听到您在 PostgreSQL 中使用“树”的理论或经验。