【问题标题】:What are the advantages of django-treebeard over django-mptt?django-treebeard 比 django-mptt 有什么优势?
【发布时间】:2016-01-19 01:51:33
【问题描述】:

有两个著名的 Django 包用于创建树结构:django-treebeard 和 django-mptt。最近Django CMS 开始使用 django-treebeard 代替 django-mptt。 Wagtail CMS 也在使用 django-treebeard。

是什么让 django-treebeard 比 django-mptt 更受欢迎?

【问题讨论】:

标签: django django-mptt django-treebeard


【解决方案1】:

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

django-mptt 使用嵌套集合,读快,写慢。

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

还有其他区别。 django-mptt 有更好的 API 和更好的文档。

【讨论】:

    【解决方案2】:

    最重要的是,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。我可以确认这个演示仍然运行良好(即使代码已经使用了几年)。

    【讨论】:

      【解决方案3】:

      您可以使用 treebeard 获得更多选项,它允许使用相同的 API 实现多个树。

      TREEBEARD: Adjacency List, Materialized Path, & Nested Sets
      
      MPTT: NESTED sets
      

      此外,MPTT 在涉及超过 1000 个节点的大树操作中可能会较慢,所以我认为项目规模应该是您考虑的因素。

      有关更多信息,请查看由 TREEBEARD 维护者 Jacob Rief 撰写的 DjangoCon Talk。演讲主题为“在关系数据库中表示层次结构” 看看他的GitHub

      【讨论】:

        猜你喜欢
        • 2011-06-27
        • 2020-05-06
        • 2010-12-13
        • 2014-10-04
        • 2017-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多