有两个著名的Django包用于创建树结构:django-treebeard和django-mptt。最近,Django CMS开始使用Djang-Tree须代替django-mptt。摇尾式CMS也在使用django-Tree胡子。
是什么让django-Tree须成为比django-mptt更好的选择?
发布于 2016-05-22 13:31:22
主要区别在于SQL树实现的选择。
django-mptt使用嵌套集,用于读取速度快,写入速度慢。
树胡子提供嵌套集,以及邻接列表(快速写入、慢读)和物化路径(快速读取、挑剔写入)。
还有其他的不同之处。django-mptt有一个更好的API和更好的文档。
发布于 2021-05-14 21:11:29
最重要的是,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。我可以确认这个演示仍然运行良好(即使代码是几年前的)。
发布于 2020-07-13 11:36:12
您可以通过树胡子获得更多的选项,它允许使用相同API的多个树实现。
TREEBEARD: Adjacency List, Materialized Path, & Nested Sets
MPTT: NESTED sets而且,MPTT在涉及1000多个节点的大型树操作中可能要慢一些,所以我认为项目大小应该考虑到您的考虑因素。
要了解更多信息,请查看树胡子维护者雅各布·里夫( Jacob )的DjangoCon谈话。讨论的主题是“表示关系数据库中的层次结构”,请查看他的GitHub
https://stackoverflow.com/questions/33236056
复制相似问题