我有一個需要在Ruby中構建和存儲大型數據樹的項目。我正在考慮序列化,反序列化和查詢樹的不同方法,我想知道什麼是最好的方法。我的主要限制是讀取時間,查詢效率和跨版本/跨平臺兼容性。最常見的操作是基於id /值和/或特徵的組合來檢索節點組。樹可以高達15-20層深。移動子樹是一個不常見的過程,但應該可以沒有太多的黑魔法。 Rails集成並不是主要關心的問題。我想過,有一些問題,以及我關心的選項,如下:Ruby中的樹數據結構持久性
- 元帥的樹木,並在需要它們加載到內存時和紅寶石對它們進行查詢(低效率樹的生長,交叉版本兼容性?)
- 與上述相同,但使用YAML(更跨版本兼容,但效率較低?)
- 與上述相同,但使用自定義XML解析器(需要重新創建從頭每次樹對象被加載?)
- 將樹序列化爲XML,將它們存儲在XML數據庫(例如Sedna)中並使用XPath查詢樹(沒有使用這種方法的經驗h,不知道效率?)
- 使用鄰接表來查詢存儲在無模式數據庫中的樹(在計算子樹時效率低下嗎?)
- 使用物化路徑(潛在的溢出最深的樹的最大字符串長度?)
- 使用嵌套集(複雜SQL查詢?)
- 使用array of ancestors方法?在根據MongoDB頁面查詢效率方面看起來很有趣,但我還沒有找到任何有關此算法的嚴肅討論。
根據您的經驗,哪種方法更適合我描述的約束?如果我去尋找一個XML數據庫,有沒有更適合這個項目的?是否有其他方法我忽略了這會更有效率?謝謝你的時間。
我的工作,我們已經經歷了不錯的成績存儲節點作爲列屬性的相關屬性和引用父節點的特殊先前列的記錄,如果沒有,則爲null。如果結果集稀疏且可以綁定最大可能的樹深度,則可以使用可用於多種sql方言中的遞歸查詢構造,存儲過程或自連接來組裝子樹。移動子樹意味着更新給定值的先前列。映射到xml reps&xpath表達式很簡單。 – collapsar 2012-03-05 10:51:03
這是否有SQL標記,因爲您正在考慮將樹存儲在關係數據庫中? – 2012-05-09 15:52:01
沒錯!你問,因爲你有在關係數據庫中存儲樹的經驗嗎? :) – user2398029 2012-05-09 16:44:32