【问题标题】:Firebase "symlink" to another nodeFirebase“符号链接”到另一个节点
【发布时间】:2016-12-30 23:20:50
【问题描述】:

关于我关于建模一个真正的面向用户的树结构 (Using firebase tree structure to represent a "document outline" structure directly) 的其他问题,我正在考虑在某些嵌套级别上实施一种通用的“符号链接”方法,以克服 32 个嵌套级别限制和一次获取所有子节点的需要。

firebase 中是否有一些“符号链接”的“最佳实践”?

例如:

  • Firebase 节点的语法(内容、键值结构),表示与另一个节点的链接
  • 符号链接应该包含到目标节点的路径(绝对路径还是相对路径?)还是只是某种全局唯一 ID?
  • 当符号链接内容完成异步加载时触发的回调 API

我正在设想一个小的包装 API,它将抽象节点是否真的存在或是否通过“符号链接”间接访问的差异。可能有一个额外的 API 方法“现在获取我这个/更多”,因为用户想要有关显示数据的更多详细信息(例如,在树中深入挖掘),它可以获取例如下一级嵌套(通过回调),抽象出孩子的内容是真的存在还是只是符号链接......

总的来说,这似乎是个好主意吗?

【问题讨论】:

    标签: firebase firebase-realtime-database data-modeling symlink-traversal nosql


    【解决方案1】:

    也许你应该看看关系世界是如何解决这个问题的。我们可以通过首先将树节点转换为文档来采用他们的解决方案。这意味着一棵树

    root 0
    |-- top child I
    +-- top child II
        |-- second-level child 1
        |   +-- third-level child a
        |-- second-level child 2
    

    您将拥有六个树节点中的每一个的文档。然后在描述树结构的文档中添加额外的数据。

    我受到this SO answer 的启发,它概述了三种方法的优缺点。让我在这里展示这些方法如何应用于面向文档的数据库。

    使用父 ID 的方法

    添加一个字段parentId,其中包含文档ID或父节点的其他一些唯一值。

    pros and cons:
    + easy to understand, cheap insert, cheap subtree move
    - difficult to retrieve subtree
    

    修改前序树遍历

    添加两个字段leftright来包含遍历的索引。首先从根节点开始,给left赋值1,然后下降到top child I,给left赋值2。如果没有更多的孩子,将下一个整数分配给right。然后上一层并将下一个整数分配给right

    有关更多详细信息,请参阅此旧指南:Modified Preorder Tree Traversal on Sitepoint

    pros and cons:
    + cheap retrieve of subtree, ordering of children guaranteed
    - difficult to understand, expensive insert (repeat tree traversal)
    

    在节点中保存路径

    使用一些唯一值(如文档 ID)并创建这些唯一值的路径,该路径从根开始并下降到节点。例如,第二级子 2 的路径可能是 "0/II/2"。或者创建一个数组['0', 'II', '2']

    pros and cons:
    + cheap retrieve of subtree, cheap insert
    - expensive subtree move
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-19
      • 2021-10-16
      • 2019-03-31
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多