django-treebeard比django-mptt有什么优势?

时间:2015-10-20 11:58:22

标签: django django-mptt django-treebeard

有两个众所周知的用于创建树结构的Django包: django-treebeard django-mptt 。最近Django CMS开始使用django-treebeard而不是django-mptt。 Wagtail CMS也在使用django-treebeard。

是什么让django-treebeard成为比django-mptt更优选的选择?

3 个答案:

答案 0 :(得分:8)

主要区别在于SQL树实现的选择。

django-mptt使用嵌套集,读取速度快,写入速度慢。

Treebeard提供嵌套集,以及邻接列表(快速写入,慢速读取)和物化路径(快速读取,快速写入)。

还有其他差异。 django-mptt有更好的API和更好的文档。

答案 1 :(得分:1)

最重要的是,django-mptt 是明确未维护的:

https://github.com/django-mptt/django-mptt#this-project-is-currently-unmaintained

因此,在这一点上,使用 django-mptt 会带来很大的风险,即您将无法使用其他软件包的当前版本(取决于 django-mptt),并且最终会遇到需要您可以切换到其他软件包,例如 django-treebeard

Postgres 用户的注意事项

顺便说一下,对于 Postgres 用户来说,还有另一个有趣的 mptt 替代方法:ltree (https://www.postgresql.org/docs/current/ltree.html)。

目前(在我撰写本文时),没有用于将 ltree 与 Django 集成的维护包。但是,django-treebeard 在添加 ltree 支持方面存在一个未解决的问题:https://github.com/django-treebeard/django-treebeard/issues/170

与此同时,无需软件包即可轻松实现。这是我找到的一个演示:https://github.com/peopledoc/django-ltree-demo。我可以确认这个演示仍然运行良好(即使代码已经有几年了)。

答案 2 :(得分:0)

您可以通过treebeard获得更多选择,它允许使用相同的API进行多种树实现。

TREEBEARD: Adjacency List, Materialized Path, & Nested Sets

MPTT: NESTED sets

另外,在涉及超过1000个节点的大树操作中,MPTT的速度可能会变慢,因此我想说项目规模应该考虑到您的考虑因素。

有关更多信息,请TREEBEARD维护者之一Jacob Rief检阅此DjangoCon Talk。演讲的主题是“在关系数据库中表示层次结构” 看看他的GitHub