gpt4 book ai didi

PostgreSQL ltree- vs 树模块 vs 整数/字符串数组或字符串分隔路径

转载 作者:行者123 更新时间:2023-11-29 11:13:20 24 4
gpt4 key购买 nike

您可能知道 PostgreSQL 有一个名为 ltree 的模块。您还可以将数组类型用于整数(*1,请参阅下面的评论),在此测试中,与 ltree 相比,它的递归查询实际上执行速度稍慢 - 除了字符串索引(*2,请参阅下面的评论)。

虽然我不太确定这些测试结果的可信度。

我在这里最大的问题实际上是关于相对不为人知且几乎没有记录的树模块。说明here (也可以在其中找到文档!!)如:

support for hierachical data types (sort of lexicographical trees), should go to contrib/tree, pending because of lack of proper documentation.

阅读完文档后,我对是否应该基于我的大型应用程序(一个 CMS,其中所有内容都将存储在分层树结构中 - 不仅是内容,还有文件等,所以你可以看到它在 ltree 周围快速扩展),正常的物化路径(路径枚举)以分隔字符串或整数数组作为路径 - 或者如果理论上相对未知的“树”模块应该是更快的性能,更具可扩展性和更好的解决方案两者中的一个。

我已经分析了不同的树结构模型,并且由于查询性能、可扩展性和节点和子树的重新排序是我的主要要求,我已经能够排除邻接列表(递归 CTE 不会解决性能问题,因为tree scales huge),Nested Sets/Intervals(在某些查询中不够快,考虑到它在操作树时的缺点),Closure Tables(在复杂树中扩展很大 - 对于像我这样的大型项目没有用)等并决定与物化路径一起使用,它对于读取操作来说非常快,并且可以轻松地在层次结构中移动子树和节点。所以问题只是关于物化路径的最佳实现方案。

我特别想听听您关于 PostgreSQL 中“树”的理论或经验。

最佳答案

据我所知,contrib/tree 从未正式发布,而 ltree 已合并到 PostgreSQL 的核心中。

我知道两者都使用标记路径的相同想法,但树只允许整数标签,当 ltree 允许允许全文搜索的文本标签时,认为完整路径长度是有限的(最大 65Kb,首选 2Kb)。

关于PostgreSQL ltree- vs 树模块 vs 整数/字符串数组或字符串分隔路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25912442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com