14

我正在开始一个具有一些分层数据的新项目,并且我正在研究将其存储在数据库中的所有选项。

我正在使用 PostgreSQL,它允许递归查询。我还研究了关系数据库的设计模式,例如闭包表,并查看了图形数据库解决方案,例如 neo4j。

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

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

4

2 回答 2

10

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

我认为有一个复杂的递归查询要好得多,你必须弄清楚一次,而不是处理单独的表和相关触发器的额外 IO(和磁盘空间)。

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

于 2011-09-21T14:29:39.440 回答
2

闭包表的级别字段(“深度”)是多余的。只需要一个递归查询来计算它。大概就是这样总结。

于 2011-09-21T10:46:51.577 回答