我正在开始一个新项目,该项目具有一些层次结构数据,目前正在寻找用于将其存储在数据库中的所有选项。

我正在使用PostgreSQL,它确实允许递归查询。我还研究了关系数据库的设计模式,例如closure tables,并研究了图数据库解决方案(例如neo4j)。

我发现很难在这些选项之间做出选择。例如:假设我的RDBMS允许递归查询,使用闭包表是否仍然有意义,并且在可维护性和性能方面,它与图形数据库解决方案相比如何?

任何意见/经验将不胜感激!

最佳答案

如果您可以使用递归查询,则整个闭合表都是多余的:)

我认为拥有一个复杂的递归查询要好得多,这比处理单独表和关联触发器的额外IO(和磁盘空间)要好得多。

我用postgres中的递归查询做了一些简单的测试。在表中有几百万行的查询中,返回特定 child 的所有 parent 的时间仍然小于10ms。归还所有 child 的速度也很快,这取决于 parent 的水平。它似乎更多地依赖于磁盘IO获取行而不是查询速度本身。这是由单用户完成的,因此不确定在负载下的性能如何。我怀疑如果您还可以将大部分表保存在内存中(并正确设置postgres),那仍然会非常快。按父ID聚簇表似乎也有帮助。

关于postgresql - 数据库: recursive query vs.闭合表与图数据库中的层次结构数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7497812/

10-11 07:00
查看更多