2

關於建模一個真正的面向用戶的樹形結構(Using firebase tree structure to represent a "document outline" structure directly)的另一個問題,我正在考慮在某些嵌套級別上實現「符號鏈接」的通用方法,以克服了32個嵌套級別的限制,並且需要一次獲取所有子節點。Firebase「符號鏈接」到另一個節點

對於firebase中的「符號鏈接」有沒有一些「最佳實踐」?

例如:

  • 語法(內容,鍵 - 值結構),用於這將象徵鏈接到另一個節點
  • 應的符號鏈接包含路徑到目標節點的火力節點(絕對或相對?)或只是某種全球唯一的ID?
  • API回調這將在符號鏈接的內容加載完成異步

我設想一個小包裝的API,將抽象的節點是否真的存在或者是區別它間接地通過「訪問被觸發符號鏈接」。當用戶想要更多關於所顯示的數據的細節(例如向下鑽入樹中)時,可能存在額外的API方法「現在獲取這個/更多」,並且它可以獲取例如下一層的嵌套(通過回調),抽象齣兒童的內容是否真的存在或只是符號鏈接...

這是否看起來像一個好主意?

回答

0

也許你應該看看關係型世界是如何解決這個問題的。我們可以通過首先將樹節點轉換爲文檔來採取他們的解決方案。這意味着一棵樹

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

你將有一個文件爲每個六個樹節點。然後在描述樹結構的文檔中有額外的數據。

我受到this SO answer的啓發,其中概述了三種方法的優缺點。讓我在這裏展示這些方法如何應用於面向文檔的數據庫。

與父ID

方法添加其中包含的文檔ID或父節點的其它一些獨特值的字段parentId

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

改性預購樹的遍歷

添加兩個字段leftright包含遍歷的索引。首先從根節點開始,將1指定爲left,然後下降到top child I,並將2指定爲left。如果沒有更多的孩子,則將下一個整數指定爲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 
相關問題